From 0b631ee80df887c96b41528fd2d80c6235de7f71 Mon Sep 17 00:00:00 2001 From: winlin Date: Mon, 1 Dec 2014 22:45:45 +0800 Subject: [PATCH] for bug #235, pass timeout to recv thread. --- trunk/src/app/srs_app_recv_thread.cpp | 11 ++++++----- trunk/src/app/srs_app_recv_thread.hpp | 5 +++-- trunk/src/app/srs_app_rtmp_conn.cpp | 2 +- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/trunk/src/app/srs_app_recv_thread.cpp b/trunk/src/app/srs_app_recv_thread.cpp index ce8fa590a..fe27a6c39 100644 --- a/trunk/src/app/srs_app_recv_thread.cpp +++ b/trunk/src/app/srs_app_recv_thread.cpp @@ -34,8 +34,9 @@ ISrsMessageHandler::~ISrsMessageHandler() { } -SrsRecvThread::SrsRecvThread(ISrsMessageHandler* msg_handler, SrsRtmpServer* rtmp_sdk) +SrsRecvThread::SrsRecvThread(ISrsMessageHandler* msg_handler, SrsRtmpServer* rtmp_sdk, int timeout_ms) { + timeout = timeout_ms; handler = msg_handler; rtmp = rtmp_sdk; trd = new SrsThread(this, 0, true); @@ -65,7 +66,7 @@ int SrsRecvThread::cycle() int ret = ERROR_SUCCESS; if (!handler->can_handle()) { - st_usleep(SRS_CONSTS_RTMP_PULSE_TIMEOUT_US); + st_usleep(timeout * 1000); return ret; } @@ -109,11 +110,11 @@ void SrsRecvThread::on_thread_stop() rtmp->set_auto_response(true); // reset the timeout to pulse mode. - rtmp->set_recv_timeout(SRS_CONSTS_RTMP_PULSE_TIMEOUT_US); + rtmp->set_recv_timeout(timeout * 1000); } -SrsQueueRecvThread::SrsQueueRecvThread(SrsRtmpServer* rtmp_sdk) - : SrsRecvThread(this, rtmp_sdk) +SrsQueueRecvThread::SrsQueueRecvThread(SrsRtmpServer* rtmp_sdk, int timeout_ms) + : SrsRecvThread(this, rtmp_sdk, timeout_ms) { } diff --git a/trunk/src/app/srs_app_recv_thread.hpp b/trunk/src/app/srs_app_recv_thread.hpp index 914be09e3..18be0df1e 100644 --- a/trunk/src/app/srs_app_recv_thread.hpp +++ b/trunk/src/app/srs_app_recv_thread.hpp @@ -68,8 +68,9 @@ protected: SrsThread* trd; ISrsMessageHandler* handler; SrsRtmpServer* rtmp; + int timeout; public: - SrsRecvThread(ISrsMessageHandler* msg_handler, SrsRtmpServer* rtmp_sdk); + SrsRecvThread(ISrsMessageHandler* msg_handler, SrsRtmpServer* rtmp_sdk, int timeout_ms); virtual ~SrsRecvThread(); public: virtual int start(); @@ -91,7 +92,7 @@ class SrsQueueRecvThread : virtual public ISrsMessageHandler, virtual public Srs private: std::vector queue; public: - SrsQueueRecvThread(SrsRtmpServer* rtmp_sdk); + SrsQueueRecvThread(SrsRtmpServer* rtmp_sdk, int timeout_ms); virtual ~SrsQueueRecvThread(); public: virtual bool empty(); diff --git a/trunk/src/app/srs_app_rtmp_conn.cpp b/trunk/src/app/srs_app_rtmp_conn.cpp index d5663bcfb..f1ac4b548 100644 --- a/trunk/src/app/srs_app_rtmp_conn.cpp +++ b/trunk/src/app/srs_app_rtmp_conn.cpp @@ -500,7 +500,7 @@ int SrsRtmpConn::playing(SrsSource* source) // use isolate thread to recv, // @see: https://github.com/winlinvip/simple-rtmp-server/issues/217 - SrsQueueRecvThread trd(rtmp); + SrsQueueRecvThread trd(rtmp, SRS_CONSTS_RTMP_PULSE_TIMEOUT_US); // start isolate recv thread. if ((ret = trd.start()) != ERROR_SUCCESS) {