diff --git a/trunk/src/app/srs_app_rtc_source.cpp b/trunk/src/app/srs_app_rtc_source.cpp index cb05232c2..5ccda2bd6 100644 --- a/trunk/src/app/srs_app_rtc_source.cpp +++ b/trunk/src/app/srs_app_rtc_source.cpp @@ -665,9 +665,6 @@ void SrsRtcSource::on_unpublish() srs_trace("cleanup when unpublish, created=%u, deliver=%u", is_created_, is_delivering_packets_); - is_created_ = false; - is_delivering_packets_ = false; - if (!_source_id.empty()) { _pre_source_id = _source_id; } @@ -701,6 +698,9 @@ void SrsRtcSource::on_unpublish() if (consumers.empty()) { stream_die_at_ = srs_get_system_time(); } + + is_created_ = false; + is_delivering_packets_ = false; } void SrsRtcSource::subscribe(ISrsRtcSourceEventHandler* h) diff --git a/trunk/src/app/srs_app_srt_source.cpp b/trunk/src/app/srs_app_srt_source.cpp index 6f46d1b72..5de8c651c 100644 --- a/trunk/src/app/srs_app_srt_source.cpp +++ b/trunk/src/app/srs_app_srt_source.cpp @@ -1073,8 +1073,6 @@ void SrsSrtSource::on_unpublish() return; } - can_publish_ = true; - SrsStatistic* stat = SrsStatistic::instance(); stat->on_stream_close(req); @@ -1090,6 +1088,8 @@ void SrsSrtSource::on_unpublish() if (consumers.empty()) { stream_die_at_ = srs_get_system_time(); } + + can_publish_ = true; } srs_error_t SrsSrtSource::on_packet(SrsSrtPacket* packet) diff --git a/trunk/src/app/srs_app_st.cpp b/trunk/src/app/srs_app_st.cpp index d80ac45a6..b924d053b 100755 --- a/trunk/src/app/srs_app_st.cpp +++ b/trunk/src/app/srs_app_st.cpp @@ -233,7 +233,8 @@ void SrsFastCoroutine::stop() } disposed = true; stopping_ = true; - + stopping_cid_ = _srs_context->get_id(); + interrupt(); // When not started, the trd is NULL.