正在显示
4 个修改的文件
包含
13 行增加
和
2 行删除
| @@ -343,6 +343,7 @@ Remark: | @@ -343,6 +343,7 @@ Remark: | ||
| 343 | 343 | ||
| 344 | ## History | 344 | ## History |
| 345 | 345 | ||
| 346 | +* v2.0, 2015-09-14, for [#474][bug #474] always release publish for source. | ||
| 346 | * v2.0, 2015-09-14, for [#458][bug #458] http hooks use source thread cid. 2.0.188 | 347 | * v2.0, 2015-09-14, for [#458][bug #458] http hooks use source thread cid. 2.0.188 |
| 347 | * v2.0, 2015-09-14, for [#475][bug #475] fix http hooks crash for st context switch. 2.0.187 | 348 | * v2.0, 2015-09-14, for [#475][bug #475] fix http hooks crash for st context switch. 2.0.187 |
| 348 | * v2.0, 2015-09-09, support reload utc_time. 2.0.186 | 349 | * v2.0, 2015-09-09, support reload utc_time. 2.0.186 |
| @@ -1026,6 +1027,7 @@ Winlin | @@ -1026,6 +1027,7 @@ Winlin | ||
| 1026 | [bug #133]: https://github.com/simple-rtmp-server/srs/issues/133 | 1027 | [bug #133]: https://github.com/simple-rtmp-server/srs/issues/133 |
| 1027 | [bug #92]: https://github.com/simple-rtmp-server/srs/issues/92 | 1028 | [bug #92]: https://github.com/simple-rtmp-server/srs/issues/92 |
| 1028 | [bug #380]: https://github.com/simple-rtmp-server/srs/issues/380 | 1029 | [bug #380]: https://github.com/simple-rtmp-server/srs/issues/380 |
| 1030 | +[bug #474]: https://github.com/simple-rtmp-server/srs/issues/474 | ||
| 1029 | [bug #475]: https://github.com/simple-rtmp-server/srs/issues/475 | 1031 | [bug #475]: https://github.com/simple-rtmp-server/srs/issues/475 |
| 1030 | [bug #458]: https://github.com/simple-rtmp-server/srs/issues/458 | 1032 | [bug #458]: https://github.com/simple-rtmp-server/srs/issues/458 |
| 1031 | [bug #454]: https://github.com/simple-rtmp-server/srs/issues/454 | 1033 | [bug #454]: https://github.com/simple-rtmp-server/srs/issues/454 |
| @@ -834,9 +834,13 @@ int SrsRtmpConn::publishing(SrsSource* source) | @@ -834,9 +834,13 @@ int SrsRtmpConn::publishing(SrsSource* source) | ||
| 834 | 834 | ||
| 835 | // stop isolate recv thread | 835 | // stop isolate recv thread |
| 836 | trd.stop(); | 836 | trd.stop(); |
| 837 | - | ||
| 838 | - release_publish(source, vhost_is_edge); | ||
| 839 | } | 837 | } |
| 838 | + | ||
| 839 | + // whatever the acquire publish, always release publish. | ||
| 840 | + // when the acquire error in the midlle-way, the publish state changed, | ||
| 841 | + // but failed, so we must cleanup it. | ||
| 842 | + // @see https://github.com/simple-rtmp-server/srs/issues/474 | ||
| 843 | + release_publish(source, vhost_is_edge); | ||
| 840 | 844 | ||
| 841 | http_hooks_on_unpublish(); | 845 | http_hooks_on_unpublish(); |
| 842 | 846 | ||
| @@ -944,10 +948,12 @@ int SrsRtmpConn::acquire_publish(SrsSource* source, bool is_edge) | @@ -944,10 +948,12 @@ int SrsRtmpConn::acquire_publish(SrsSource* source, bool is_edge) | ||
| 944 | if (is_edge) { | 948 | if (is_edge) { |
| 945 | if ((ret = source->on_edge_start_publish()) != ERROR_SUCCESS) { | 949 | if ((ret = source->on_edge_start_publish()) != ERROR_SUCCESS) { |
| 946 | srs_error("notice edge start publish stream failed. ret=%d", ret); | 950 | srs_error("notice edge start publish stream failed. ret=%d", ret); |
| 951 | + return ret; | ||
| 947 | } | 952 | } |
| 948 | } else { | 953 | } else { |
| 949 | if ((ret = source->on_publish()) != ERROR_SUCCESS) { | 954 | if ((ret = source->on_publish()) != ERROR_SUCCESS) { |
| 950 | srs_error("notify publish failed. ret=%d", ret); | 955 | srs_error("notify publish failed. ret=%d", ret); |
| 956 | + return ret; | ||
| 951 | } | 957 | } |
| 952 | } | 958 | } |
| 953 | 959 |
| @@ -2066,6 +2066,7 @@ int SrsSource::on_publish() | @@ -2066,6 +2066,7 @@ int SrsSource::on_publish() | ||
| 2066 | } | 2066 | } |
| 2067 | SrsStatistic* stat = SrsStatistic::instance(); | 2067 | SrsStatistic* stat = SrsStatistic::instance(); |
| 2068 | stat->on_stream_publish(_req, _source_id); | 2068 | stat->on_stream_publish(_req, _source_id); |
| 2069 | + | ||
| 2069 | return ret; | 2070 | return ret; |
| 2070 | } | 2071 | } |
| 2071 | 2072 |
| @@ -217,6 +217,8 @@ namespace internal { | @@ -217,6 +217,8 @@ namespace internal { | ||
| 217 | 217 | ||
| 218 | handler->on_thread_stop(); | 218 | handler->on_thread_stop(); |
| 219 | srs_info("thread %s cycle finished", _name); | 219 | srs_info("thread %s cycle finished", _name); |
| 220 | + | ||
| 221 | + // TODO: FIXME: when thread terminated normally, set the tid to NULL. | ||
| 220 | } | 222 | } |
| 221 | 223 | ||
| 222 | void* SrsThread::thread_fun(void* arg) | 224 | void* SrsThread::thread_fun(void* arg) |
-
请 注册 或 登录 后发表评论