正在显示
5 个修改的文件
包含
41 行增加
和
0 行删除
| @@ -505,6 +505,21 @@ int SrsConfig::reload() | @@ -505,6 +505,21 @@ int SrsConfig::reload() | ||
| 505 | srs_trace("reload listen success."); | 505 | srs_trace("reload listen success."); |
| 506 | } | 506 | } |
| 507 | 507 | ||
| 508 | + // merge config: pid | ||
| 509 | + if (!srs_directive_equals(root->get("pid"), old_root->get("pid"))) { | ||
| 510 | + for (it = subscribes.begin(); it != subscribes.end(); ++it) { | ||
| 511 | + ISrsReloadHandler* subscribe = *it; | ||
| 512 | + if ((ret = subscribe->on_reload_pid()) != ERROR_SUCCESS) { | ||
| 513 | + srs_error("notify subscribes reload pid failed. ret=%d", ret); | ||
| 514 | + return ret; | ||
| 515 | + } | ||
| 516 | + } | ||
| 517 | + srs_trace("reload pid success."); | ||
| 518 | + } | ||
| 519 | + | ||
| 520 | + // directly supported for reload: | ||
| 521 | + // chunk_size, ff_log_dir | ||
| 522 | + | ||
| 508 | // merge config: pithy_print | 523 | // merge config: pithy_print |
| 509 | if (!srs_directive_equals(root->get("pithy_print"), old_root->get("pithy_print"))) { | 524 | if (!srs_directive_equals(root->get("pithy_print"), old_root->get("pithy_print"))) { |
| 510 | for (it = subscribes.begin(); it != subscribes.end(); ++it) { | 525 | for (it = subscribes.begin(); it != subscribes.end(); ++it) { |
| @@ -40,6 +40,11 @@ int ISrsReloadHandler::on_reload_listen() | @@ -40,6 +40,11 @@ int ISrsReloadHandler::on_reload_listen() | ||
| 40 | return ERROR_SUCCESS; | 40 | return ERROR_SUCCESS; |
| 41 | } | 41 | } |
| 42 | 42 | ||
| 43 | +int ISrsReloadHandler::on_reload_pid() | ||
| 44 | +{ | ||
| 45 | + return ERROR_SUCCESS; | ||
| 46 | +} | ||
| 47 | + | ||
| 43 | int ISrsReloadHandler::on_reload_pithy_print() | 48 | int ISrsReloadHandler::on_reload_pithy_print() |
| 44 | { | 49 | { |
| 45 | return ERROR_SUCCESS; | 50 | return ERROR_SUCCESS; |
| @@ -42,6 +42,7 @@ public: | @@ -42,6 +42,7 @@ public: | ||
| 42 | virtual ~ISrsReloadHandler(); | 42 | virtual ~ISrsReloadHandler(); |
| 43 | public: | 43 | public: |
| 44 | virtual int on_reload_listen(); | 44 | virtual int on_reload_listen(); |
| 45 | + virtual int on_reload_pid(); | ||
| 45 | virtual int on_reload_pithy_print(); | 46 | virtual int on_reload_pithy_print(); |
| 46 | virtual int on_reload_vhost_added(std::string vhost); | 47 | virtual int on_reload_vhost_added(std::string vhost); |
| 47 | virtual int on_reload_vhost_removed(std::string vhost); | 48 | virtual int on_reload_vhost_removed(std::string vhost); |
| @@ -159,6 +159,7 @@ SrsServer::SrsServer() | @@ -159,6 +159,7 @@ SrsServer::SrsServer() | ||
| 159 | { | 159 | { |
| 160 | signal_reload = false; | 160 | signal_reload = false; |
| 161 | signal_gmc_stop = false; | 161 | signal_gmc_stop = false; |
| 162 | + pid_fd = -1; | ||
| 162 | 163 | ||
| 163 | // donot new object in constructor, | 164 | // donot new object in constructor, |
| 164 | // for some global instance is not ready now, | 165 | // for some global instance is not ready now, |
| @@ -189,6 +190,11 @@ SrsServer::~SrsServer() | @@ -189,6 +190,11 @@ SrsServer::~SrsServer() | ||
| 189 | 190 | ||
| 190 | close_listeners(); | 191 | close_listeners(); |
| 191 | 192 | ||
| 193 | + if (pid_fd > 0) { | ||
| 194 | + ::close(pid_fd); | ||
| 195 | + pid_fd = -1; | ||
| 196 | + } | ||
| 197 | + | ||
| 192 | #ifdef SRS_HTTP_API | 198 | #ifdef SRS_HTTP_API |
| 193 | srs_freep(http_api_handler); | 199 | srs_freep(http_api_handler); |
| 194 | #endif | 200 | #endif |
| @@ -310,6 +316,7 @@ int SrsServer::acquire_pid_file() | @@ -310,6 +316,7 @@ int SrsServer::acquire_pid_file() | ||
| 310 | } | 316 | } |
| 311 | 317 | ||
| 312 | srs_trace("write pid=%d to %s success!", pid, pid_file.c_str()); | 318 | srs_trace("write pid=%d to %s success!", pid, pid_file.c_str()); |
| 319 | + pid_fd = fd; | ||
| 313 | 320 | ||
| 314 | return ret; | 321 | return ret; |
| 315 | } | 322 | } |
| @@ -554,3 +561,13 @@ int SrsServer::on_reload_listen() | @@ -554,3 +561,13 @@ int SrsServer::on_reload_listen() | ||
| 554 | { | 561 | { |
| 555 | return listen(); | 562 | return listen(); |
| 556 | } | 563 | } |
| 564 | + | ||
| 565 | +int SrsServer::on_reload_pid() | ||
| 566 | +{ | ||
| 567 | + if (pid_fd > 0) { | ||
| 568 | + ::close(pid_fd); | ||
| 569 | + pid_fd = -1; | ||
| 570 | + } | ||
| 571 | + | ||
| 572 | + return acquire_pid_file(); | ||
| 573 | +} |
| @@ -88,6 +88,7 @@ private: | @@ -88,6 +88,7 @@ private: | ||
| 88 | SrsIngester* ingester; | 88 | SrsIngester* ingester; |
| 89 | #endif | 89 | #endif |
| 90 | private: | 90 | private: |
| 91 | + int pid_fd; | ||
| 91 | std::vector<SrsConnection*> conns; | 92 | std::vector<SrsConnection*> conns; |
| 92 | std::vector<SrsListener*> listeners; | 93 | std::vector<SrsListener*> listeners; |
| 93 | bool signal_reload; | 94 | bool signal_reload; |
| @@ -107,8 +108,10 @@ public: | @@ -107,8 +108,10 @@ public: | ||
| 107 | private: | 108 | private: |
| 108 | virtual void close_listeners(); | 109 | virtual void close_listeners(); |
| 109 | virtual int accept_client(SrsListenerType type, st_netfd_t client_stfd); | 110 | virtual int accept_client(SrsListenerType type, st_netfd_t client_stfd); |
| 111 | +// interface ISrsThreadHandler. | ||
| 110 | public: | 112 | public: |
| 111 | virtual int on_reload_listen(); | 113 | virtual int on_reload_listen(); |
| 114 | + virtual int on_reload_pid(); | ||
| 112 | }; | 115 | }; |
| 113 | 116 | ||
| 114 | #endif | 117 | #endif |
-
请 注册 或 登录 后发表评论