1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-03-09 15:49:59 +00:00

support reload pid.

This commit is contained in:
winlin 2014-04-12 20:46:32 +08:00
parent 0a016e58bf
commit f652c28485
5 changed files with 41 additions and 0 deletions

View file

@ -505,6 +505,21 @@ int SrsConfig::reload()
srs_trace("reload listen success."); srs_trace("reload listen success.");
} }
// merge config: pid
if (!srs_directive_equals(root->get("pid"), old_root->get("pid"))) {
for (it = subscribes.begin(); it != subscribes.end(); ++it) {
ISrsReloadHandler* subscribe = *it;
if ((ret = subscribe->on_reload_pid()) != ERROR_SUCCESS) {
srs_error("notify subscribes reload pid failed. ret=%d", ret);
return ret;
}
}
srs_trace("reload pid success.");
}
// directly supported for reload:
// chunk_size, ff_log_dir
// merge config: pithy_print // merge config: pithy_print
if (!srs_directive_equals(root->get("pithy_print"), old_root->get("pithy_print"))) { if (!srs_directive_equals(root->get("pithy_print"), old_root->get("pithy_print"))) {
for (it = subscribes.begin(); it != subscribes.end(); ++it) { for (it = subscribes.begin(); it != subscribes.end(); ++it) {

View file

@ -40,6 +40,11 @@ int ISrsReloadHandler::on_reload_listen()
return ERROR_SUCCESS; return ERROR_SUCCESS;
} }
int ISrsReloadHandler::on_reload_pid()
{
return ERROR_SUCCESS;
}
int ISrsReloadHandler::on_reload_pithy_print() int ISrsReloadHandler::on_reload_pithy_print()
{ {
return ERROR_SUCCESS; return ERROR_SUCCESS;

View file

@ -42,6 +42,7 @@ public:
virtual ~ISrsReloadHandler(); virtual ~ISrsReloadHandler();
public: public:
virtual int on_reload_listen(); virtual int on_reload_listen();
virtual int on_reload_pid();
virtual int on_reload_pithy_print(); virtual int on_reload_pithy_print();
virtual int on_reload_vhost_added(std::string vhost); virtual int on_reload_vhost_added(std::string vhost);
virtual int on_reload_vhost_removed(std::string vhost); virtual int on_reload_vhost_removed(std::string vhost);

View file

@ -159,6 +159,7 @@ SrsServer::SrsServer()
{ {
signal_reload = false; signal_reload = false;
signal_gmc_stop = false; signal_gmc_stop = false;
pid_fd = -1;
// donot new object in constructor, // donot new object in constructor,
// for some global instance is not ready now, // for some global instance is not ready now,
@ -189,6 +190,11 @@ SrsServer::~SrsServer()
close_listeners(); close_listeners();
if (pid_fd > 0) {
::close(pid_fd);
pid_fd = -1;
}
#ifdef SRS_HTTP_API #ifdef SRS_HTTP_API
srs_freep(http_api_handler); srs_freep(http_api_handler);
#endif #endif
@ -310,6 +316,7 @@ int SrsServer::acquire_pid_file()
} }
srs_trace("write pid=%d to %s success!", pid, pid_file.c_str()); srs_trace("write pid=%d to %s success!", pid, pid_file.c_str());
pid_fd = fd;
return ret; return ret;
} }
@ -554,3 +561,13 @@ int SrsServer::on_reload_listen()
{ {
return listen(); return listen();
} }
int SrsServer::on_reload_pid()
{
if (pid_fd > 0) {
::close(pid_fd);
pid_fd = -1;
}
return acquire_pid_file();
}

View file

@ -88,6 +88,7 @@ private:
SrsIngester* ingester; SrsIngester* ingester;
#endif #endif
private: private:
int pid_fd;
std::vector<SrsConnection*> conns; std::vector<SrsConnection*> conns;
std::vector<SrsListener*> listeners; std::vector<SrsListener*> listeners;
bool signal_reload; bool signal_reload;
@ -107,8 +108,10 @@ public:
private: private:
virtual void close_listeners(); virtual void close_listeners();
virtual int accept_client(SrsListenerType type, st_netfd_t client_stfd); virtual int accept_client(SrsListenerType type, st_netfd_t client_stfd);
// interface ISrsThreadHandler.
public: public:
virtual int on_reload_listen(); virtual int on_reload_listen();
virtual int on_reload_pid();
}; };
#endif #endif