From ccb79bc7ebe5b2ef8fa19d90437feff216648c48 Mon Sep 17 00:00:00 2001 From: winlin Date: Thu, 11 Feb 2021 23:10:08 +0800 Subject: [PATCH] For #2194, yield for timer, for rtc player --- trunk/src/app/srs_app_listener.cpp | 10 +++++++++- trunk/src/app/srs_app_listener.hpp | 2 ++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/trunk/src/app/srs_app_listener.cpp b/trunk/src/app/srs_app_listener.cpp index 918ea91f7..a2aaa7407 100755 --- a/trunk/src/app/srs_app_listener.cpp +++ b/trunk/src/app/srs_app_listener.cpp @@ -292,6 +292,7 @@ srs_error_t SrsTcpListener::cycle() SrsUdpMuxSocket::SrsUdpMuxSocket(srs_netfd_t fd) { + nn_msgs_for_yield_ = 0; nb_buf = SRS_UDP_MAX_PACKET_SIZE; buf = new char[nb_buf]; nread = 0; @@ -359,7 +360,14 @@ srs_error_t SrsUdpMuxSocket::sendto(void* data, int size, srs_utime_t timeout) } return srs_error_new(ERROR_SOCKET_WRITE, "sendto"); - } + } + + // Yield to another coroutines. + // @see https://github.com/ossrs/srs/issues/2194#issuecomment-777542162 + if (++nn_msgs_for_yield_ > 20) { + nn_msgs_for_yield_ = 0; + srs_thread_yield(); + } return err; } diff --git a/trunk/src/app/srs_app_listener.hpp b/trunk/src/app/srs_app_listener.hpp index 53d0f92c0..a42fbefd5 100644 --- a/trunk/src/app/srs_app_listener.hpp +++ b/trunk/src/app/srs_app_listener.hpp @@ -138,6 +138,8 @@ public: class SrsUdpMuxSocket { private: + // For sender yield only. + uint32_t nn_msgs_for_yield_; std::map cache_; SrsBuffer* cache_buffer_; private: