winlin

for bug #237, add name for thread. 2.0.47

@@ -37,7 +37,7 @@ SrsConnection::SrsConnection(SrsServer* srs_server, st_netfd_t client_stfd) @@ -37,7 +37,7 @@ SrsConnection::SrsConnection(SrsServer* srs_server, st_netfd_t client_stfd)
37 // so we never use joinable. 37 // so we never use joinable.
38 // TODO: FIXME: maybe other thread need to stop it. 38 // TODO: FIXME: maybe other thread need to stop it.
39 // @see: https://github.com/winlinvip/simple-rtmp-server/issues/78 39 // @see: https://github.com/winlinvip/simple-rtmp-server/issues/78
40 - pthread = new SrsThread(this, 0, false); 40 + pthread = new SrsThread("conn", this, 0, false);
41 } 41 }
42 42
43 SrsConnection::~SrsConnection() 43 SrsConnection::~SrsConnection()
@@ -69,7 +69,7 @@ SrsEdgeIngester::SrsEdgeIngester() @@ -69,7 +69,7 @@ SrsEdgeIngester::SrsEdgeIngester()
69 origin_index = 0; 69 origin_index = 0;
70 stream_id = 0; 70 stream_id = 0;
71 stfd = NULL; 71 stfd = NULL;
72 - pthread = new SrsThread(this, SRS_EDGE_INGESTER_SLEEP_US, true); 72 + pthread = new SrsThread("edge-igs", this, SRS_EDGE_INGESTER_SLEEP_US, true);
73 } 73 }
74 74
75 SrsEdgeIngester::~SrsEdgeIngester() 75 SrsEdgeIngester::~SrsEdgeIngester()
@@ -386,7 +386,7 @@ SrsEdgeForwarder::SrsEdgeForwarder() @@ -386,7 +386,7 @@ SrsEdgeForwarder::SrsEdgeForwarder()
386 origin_index = 0; 386 origin_index = 0;
387 stream_id = 0; 387 stream_id = 0;
388 stfd = NULL; 388 stfd = NULL;
389 - pthread = new SrsThread(this, SRS_EDGE_FORWARDER_SLEEP_US, true); 389 + pthread = new SrsThread("edge-fwr", this, SRS_EDGE_FORWARDER_SLEEP_US, true);
390 queue = new SrsMessageQueue(); 390 queue = new SrsMessageQueue();
391 send_error_code = ERROR_SUCCESS; 391 send_error_code = ERROR_SUCCESS;
392 } 392 }
@@ -44,7 +44,7 @@ static std::vector<std::string> _transcoded_url; @@ -44,7 +44,7 @@ static std::vector<std::string> _transcoded_url;
44 44
45 SrsEncoder::SrsEncoder() 45 SrsEncoder::SrsEncoder()
46 { 46 {
47 - pthread = new SrsThread(this, SRS_RTMP_ENCODER_SLEEP_US, true); 47 + pthread = new SrsThread("encoder", this, SRS_RTMP_ENCODER_SLEEP_US, true);
48 pithy_print = new SrsPithyPrint(SRS_CONSTS_STAGE_ENCODER); 48 pithy_print = new SrsPithyPrint(SRS_CONSTS_STAGE_ENCODER);
49 } 49 }
50 50
@@ -58,7 +58,7 @@ SrsForwarder::SrsForwarder(SrsSource* _source) @@ -58,7 +58,7 @@ SrsForwarder::SrsForwarder(SrsSource* _source)
58 kbps = new SrsKbps(); 58 kbps = new SrsKbps();
59 stream_id = 0; 59 stream_id = 0;
60 60
61 - pthread = new SrsThread(this, SRS_FORWARDER_SLEEP_US, true); 61 + pthread = new SrsThread("forward", this, SRS_FORWARDER_SLEEP_US, true);
62 queue = new SrsMessageQueue(); 62 queue = new SrsMessageQueue();
63 jitter = new SrsRtmpJitter(); 63 jitter = new SrsRtmpJitter();
64 64
@@ -36,7 +36,7 @@ using namespace std; @@ -36,7 +36,7 @@ using namespace std;
36 36
37 // when error, ingester sleep for a while and retry. 37 // when error, ingester sleep for a while and retry.
38 // ingest never sleep a long time, for we must start the stream ASAP. 38 // ingest never sleep a long time, for we must start the stream ASAP.
39 -#define SRS_AUTO_INGESTER_SLEEP_US (int64_t)(6*100*1000LL) 39 +#define SRS_AUTO_INGESTER_SLEEP_US (int64_t)(3*1000*1000LL)
40 40
41 SrsIngesterFFMPEG::SrsIngesterFFMPEG(SrsFFMPEG* _ffmpeg, string _vhost, string _id) 41 SrsIngesterFFMPEG::SrsIngesterFFMPEG(SrsFFMPEG* _ffmpeg, string _vhost, string _id)
42 { 42 {
@@ -54,7 +54,7 @@ SrsIngester::SrsIngester() @@ -54,7 +54,7 @@ SrsIngester::SrsIngester()
54 { 54 {
55 _srs_config->subscribe(this); 55 _srs_config->subscribe(this);
56 56
57 - pthread = new SrsThread(this, SRS_AUTO_INGESTER_SLEEP_US, true); 57 + pthread = new SrsThread("ingest", this, SRS_AUTO_INGESTER_SLEEP_US, true);
58 pithy_print = new SrsPithyPrint(SRS_CONSTS_STAGE_INGESTER); 58 pithy_print = new SrsPithyPrint(SRS_CONSTS_STAGE_INGESTER);
59 } 59 }
60 60
@@ -40,7 +40,7 @@ SrsRecvThread::SrsRecvThread(ISrsMessageHandler* msg_handler, SrsRtmpServer* rtm @@ -40,7 +40,7 @@ SrsRecvThread::SrsRecvThread(ISrsMessageHandler* msg_handler, SrsRtmpServer* rtm
40 timeout = timeout_ms; 40 timeout = timeout_ms;
41 handler = msg_handler; 41 handler = msg_handler;
42 rtmp = rtmp_sdk; 42 rtmp = rtmp_sdk;
43 - trd = new SrsThread(this, 0, true); 43 + trd = new SrsThread("recv", this, 0, true);
44 } 44 }
45 45
46 SrsRecvThread::~SrsRecvThread() 46 SrsRecvThread::~SrsRecvThread()
@@ -53,9 +53,9 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -53,9 +53,9 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
53 53
54 // system interval in ms, 54 // system interval in ms,
55 // all resolution times should be times togother, 55 // all resolution times should be times togother,
56 -// for example, system-time is 3(300ms),  
57 -// then rusage can be 3*x, for instance, 3*10=30(3s),  
58 -// the meminfo canbe 30*x, for instance, 30*2=60(6s) 56 +// for example, system-interval is x=1s(1000ms),
  57 +// then rusage can be 3*x, for instance, 3*1=3s,
  58 +// the meminfo canbe 6*x, for instance, 6*1=6s,
59 // for performance refine, @see: https://github.com/winlinvip/simple-rtmp-server/issues/194 59 // for performance refine, @see: https://github.com/winlinvip/simple-rtmp-server/issues/194
60 // @remark, recomment to 1000ms. 60 // @remark, recomment to 1000ms.
61 #define SRS_SYS_CYCLE_INTERVAL 1000 61 #define SRS_SYS_CYCLE_INTERVAL 1000
@@ -63,7 +63,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -63,7 +63,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
63 // update time interval: 63 // update time interval:
64 // SRS_SYS_CYCLE_INTERVAL * SRS_SYS_TIME_RESOLUTION_MS_TIMES 64 // SRS_SYS_CYCLE_INTERVAL * SRS_SYS_TIME_RESOLUTION_MS_TIMES
65 // @see SYS_TIME_RESOLUTION_US 65 // @see SYS_TIME_RESOLUTION_US
66 -#define SRS_SYS_TIME_RESOLUTION_MS_TIMES 3 66 +#define SRS_SYS_TIME_RESOLUTION_MS_TIMES 1
67 67
68 // update rusage interval: 68 // update rusage interval:
69 // SRS_SYS_CYCLE_INTERVAL * SRS_SYS_RUSAGE_RESOLUTION_TIMES 69 // SRS_SYS_CYCLE_INTERVAL * SRS_SYS_RUSAGE_RESOLUTION_TIMES
@@ -102,7 +102,7 @@ SrsListener::SrsListener(SrsServer* server, SrsListenerType type) @@ -102,7 +102,7 @@ SrsListener::SrsListener(SrsServer* server, SrsListenerType type)
102 _server = server; 102 _server = server;
103 _type = type; 103 _type = type;
104 104
105 - pthread = new SrsThread(this, 0, true); 105 + pthread = new SrsThread("listen", this, 0, true);
106 } 106 }
107 107
108 SrsListener::~SrsListener() 108 SrsListener::~SrsListener()
@@ -215,7 +215,7 @@ SrsSignalManager::SrsSignalManager(SrsServer* server) @@ -215,7 +215,7 @@ SrsSignalManager::SrsSignalManager(SrsServer* server)
215 215
216 _server = server; 216 _server = server;
217 sig_pipe[0] = sig_pipe[1] = -1; 217 sig_pipe[0] = sig_pipe[1] = -1;
218 - pthread = new SrsThread(this, 0, true); 218 + pthread = new SrsThread("signal", this, 0, true);
219 signal_read_stfd = NULL; 219 signal_read_stfd = NULL;
220 } 220 }
221 221
@@ -714,7 +714,7 @@ int SrsServer::do_cycle() @@ -714,7 +714,7 @@ int SrsServer::do_cycle()
714 srs_trace("reload config success."); 714 srs_trace("reload config success.");
715 } 715 }
716 716
717 - // update the cache time or rusage. 717 + // update the cache time
718 if ((i % SRS_SYS_TIME_RESOLUTION_MS_TIMES) == 0) { 718 if ((i % SRS_SYS_TIME_RESOLUTION_MS_TIMES) == 0) {
719 srs_info("update current time cache."); 719 srs_info("update current time cache.");
720 srs_update_system_time_ms(); 720 srs_update_system_time_ms();
@@ -54,8 +54,9 @@ void ISrsThreadHandler::on_thread_stop() @@ -54,8 +54,9 @@ void ISrsThreadHandler::on_thread_stop()
54 { 54 {
55 } 55 }
56 56
57 -SrsThread::SrsThread(ISrsThreadHandler* thread_handler, int64_t interval_us, bool joinable) 57 +SrsThread::SrsThread(const char* name, ISrsThreadHandler* thread_handler, int64_t interval_us, bool joinable)
58 { 58 {
  59 + _name = name;
59 handler = thread_handler; 60 handler = thread_handler;
60 cycle_interval_us = interval_us; 61 cycle_interval_us = interval_us;
61 62
@@ -86,7 +87,7 @@ int SrsThread::start() @@ -86,7 +87,7 @@ int SrsThread::start()
86 int ret = ERROR_SUCCESS; 87 int ret = ERROR_SUCCESS;
87 88
88 if(tid) { 89 if(tid) {
89 - srs_info("thread already running."); 90 + srs_info("thread %s already running.", _name);
90 return ret; 91 return ret;
91 } 92 }
92 93
@@ -141,7 +142,7 @@ void SrsThread::thread_cycle() @@ -141,7 +142,7 @@ void SrsThread::thread_cycle()
141 int ret = ERROR_SUCCESS; 142 int ret = ERROR_SUCCESS;
142 143
143 _srs_context->generate_id(); 144 _srs_context->generate_id();
144 - srs_info("thread cycle start"); 145 + srs_info("thread %s cycle start", _name);
145 146
146 _cid = _srs_context->get_id(); 147 _cid = _srs_context->get_id();
147 148
@@ -155,24 +156,24 @@ void SrsThread::thread_cycle() @@ -155,24 +156,24 @@ void SrsThread::thread_cycle()
155 156
156 while (loop) { 157 while (loop) {
157 if ((ret = handler->on_before_cycle()) != ERROR_SUCCESS) { 158 if ((ret = handler->on_before_cycle()) != ERROR_SUCCESS) {
158 - srs_warn("thread on before cycle failed, ignored and retry, ret=%d", ret); 159 + srs_warn("thread %s on before cycle failed, ignored and retry, ret=%d", _name, ret);
159 goto failed; 160 goto failed;
160 } 161 }
161 - srs_info("thread on before cycle success"); 162 + srs_info("thread %s on before cycle success");
162 163
163 if ((ret = handler->cycle()) != ERROR_SUCCESS) { 164 if ((ret = handler->cycle()) != ERROR_SUCCESS) {
164 if (!srs_is_client_gracefully_close(ret)) { 165 if (!srs_is_client_gracefully_close(ret)) {
165 - srs_warn("thread cycle failed, ignored and retry, ret=%d", ret); 166 + srs_warn("thread cycle failed, ignored and retry, ret=%d", _name, ret);
166 } 167 }
167 goto failed; 168 goto failed;
168 } 169 }
169 - srs_info("thread cycle success"); 170 + srs_info("thread %s cycle success", _name);
170 171
171 if ((ret = handler->on_end_cycle()) != ERROR_SUCCESS) { 172 if ((ret = handler->on_end_cycle()) != ERROR_SUCCESS) {
172 - srs_warn("thread on end cycle failed, ignored and retry, ret=%d", ret); 173 + srs_warn("thread %s on end cycle failed, ignored and retry, ret=%d", _name, ret);
173 goto failed; 174 goto failed;
174 } 175 }
175 - srs_info("thread on end cycle success"); 176 + srs_info("thread %s on end cycle success", _name);
176 177
177 failed: 178 failed:
178 if (!loop) { 179 if (!loop) {
@@ -187,7 +188,7 @@ failed: @@ -187,7 +188,7 @@ failed:
187 } 188 }
188 189
189 handler->on_thread_stop(); 190 handler->on_thread_stop();
190 - srs_info("thread cycle finished"); 191 + srs_info("thread %s cycle finished", _name);
191 } 192 }
192 193
193 void* SrsThread::thread_fun(void* arg) 194 void* SrsThread::thread_fun(void* arg)
@@ -88,23 +88,26 @@ private: @@ -88,23 +88,26 @@ private:
88 bool loop; 88 bool loop;
89 bool can_run; 89 bool can_run;
90 bool _joinable; 90 bool _joinable;
  91 + const char* _name;
91 private: 92 private:
92 ISrsThreadHandler* handler; 93 ISrsThreadHandler* handler;
93 int64_t cycle_interval_us; 94 int64_t cycle_interval_us;
94 public: 95 public:
95 /** 96 /**
96 * initialize the thread. 97 * initialize the thread.
  98 + * @param name, human readable name for st debug.
97 * @param thread_handler, the cycle handler for the thread. 99 * @param thread_handler, the cycle handler for the thread.
98 * @param interval_us, the sleep interval when cycle finished. 100 * @param interval_us, the sleep interval when cycle finished.
99 * @param joinable, if joinable, other thread must stop the thread. 101 * @param joinable, if joinable, other thread must stop the thread.
100 * @remark if joinable, thread never quit itself, or memory leak. 102 * @remark if joinable, thread never quit itself, or memory leak.
101 * @see: https://github.com/winlinvip/simple-rtmp-server/issues/78 103 * @see: https://github.com/winlinvip/simple-rtmp-server/issues/78
  104 + * @remark about st debug, see st-1.9/README, _st_iterate_threads_flag
102 */ 105 */
103 /** 106 /**
104 * TODO: FIXME: maybe all thread must be reap by others threads, 107 * TODO: FIXME: maybe all thread must be reap by others threads,
105 * @see: https://github.com/winlinvip/simple-rtmp-server/issues/77 108 * @see: https://github.com/winlinvip/simple-rtmp-server/issues/77
106 */ 109 */
107 - SrsThread(ISrsThreadHandler* thread_handler, int64_t interval_us, bool joinable); 110 + SrsThread(const char* name, ISrsThreadHandler* thread_handler, int64_t interval_us, bool joinable);
108 virtual ~SrsThread(); 111 virtual ~SrsThread();
109 public: 112 public:
110 /** 113 /**