1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-03-09 15:49:59 +00:00

for bug #237, refine the thread loop for publish thread. 2.0.47

This commit is contained in:
winlin 2014-12-02 19:28:36 +08:00
parent 24a6a723ee
commit 463e1fbc41
2 changed files with 30 additions and 32 deletions

View file

@ -66,16 +66,23 @@ int SrsRecvThread::cycle()
{
int ret = ERROR_SUCCESS;
while (trd->can_loop()) {
if (!handler->can_handle()) {
st_usleep(timeout * 1000);
return ret;
continue;
}
SrsMessage* msg = NULL;
if ((ret = rtmp->recv_message(&msg)) != ERROR_SUCCESS) {
// recv and handle message
ret = rtmp->recv_message(&msg);
if (ret == ERROR_SUCCESS) {
ret = handler->handle(msg);
}
if (ret != ERROR_SUCCESS) {
if (!srs_is_client_gracefully_close(ret)) {
srs_error("recv client control message failed. ret=%d", ret);
srs_error("thread process message failed. ret=%d", ret);
}
// we use no timeout to recv, should never got any error.
@ -86,9 +93,8 @@ int SrsRecvThread::cycle()
return ret;
}
srs_verbose("play loop recv message. ret=%d", ret);
handler->handle(msg);
srs_verbose("thread loop recv message. ret=%d", ret);
}
return ret;
}
@ -263,21 +269,13 @@ int SrsPublishRecvThread::handle(SrsMessage* msg)
_nb_msgs++;
// the rtmp connection will handle this message,
// quit the thread loop when error.
recv_error_code = ret = _conn->handle_publish_message(_source, msg, _is_fmle, _is_edge);
// when error, use stop loop to terminate the thread normally,
// for we are in the thread loop now, and should never use stop() to terminate it.
if (ret != ERROR_SUCCESS) {
trd.stop_loop();
}
// the rtmp connection will handle this message
ret = _conn->handle_publish_message(_source, msg, _is_fmle, _is_edge);
// must always free it,
// the source will copy it if need to use.
srs_freep(msg);
// TODO: FIXME: implements it.
return ret;
}

View file

@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
// current release version
#define VERSION_MAJOR 2
#define VERSION_MINOR 0
#define VERSION_REVISION 46
#define VERSION_REVISION 47
// server info.
#define RTMP_SIG_SRS_KEY "SRS"
#define RTMP_SIG_SRS_ROLE "origin/edge server"