For #2194, yield for timer, for live publisher

pull/2213/head
winlin 4 years ago
parent d1bcc03d9a
commit a5a96491a3

@ -289,6 +289,7 @@ SrsPublishRecvThread::SrsPublishRecvThread(SrsRtmpServer* rtmp_sdk, SrsRequest*
_conn = conn; _conn = conn;
_source = source; _source = source;
nn_msgs_for_yield_ = 0;
recv_error = srs_success; recv_error = srs_success;
_nb_msgs = 0; _nb_msgs = 0;
video_frames = 0; video_frames = 0;
@ -402,6 +403,13 @@ srs_error_t SrsPublishRecvThread::consume(SrsCommonMessage* msg)
return srs_error_wrap(err, "handle publish message"); return srs_error_wrap(err, "handle publish message");
} }
// Yield to another coroutines.
// @see https://github.com/ossrs/srs/issues/2194#issuecomment-777463768
if (++nn_msgs_for_yield_ >= 15) {
nn_msgs_for_yield_ = 0;
srs_thread_yield();
}
return err; return err;
} }

@ -144,6 +144,7 @@ class SrsPublishRecvThread : virtual public ISrsMessagePumper, virtual public IS
#endif #endif
{ {
private: private:
uint32_t nn_msgs_for_yield_;
SrsRecvThread trd; SrsRecvThread trd;
SrsRtmpServer* rtmp; SrsRtmpServer* rtmp;
SrsRequest* req; SrsRequest* req;

@ -828,6 +828,7 @@ srs_error_t SrsRtmpConn::do_playing(SrsSource* source, SrsConsumer* consumer, Sr
} }
// Yield to another coroutines. // Yield to another coroutines.
// @see https://github.com/ossrs/srs/issues/2194#issuecomment-777437476
srs_thread_yield(); srs_thread_yield();
} }

Loading…
Cancel
Save