diff --git a/README.md b/README.md index c9fc999df..eb2ebc961 100755 --- a/README.md +++ b/README.md @@ -403,6 +403,7 @@ Remark: ======= ## History +* v2.0, 2016-09-01, workaround [bug #511] the fly stfd in close. 2.0.211 * v2.0, 2016-08-30, comment the pcr. * v2.0, 2016-08-18, fix [srs-librtmp#4](https://github.com/ossrs/srs-librtmp/issues/4) filter frame. * v2.0, 2016-08-10, fix socket timeout for librtmp. @@ -1312,6 +1313,7 @@ Winlin [bug #546]: https://github.com/ossrs/srs/issues/546 [bug #418]: https://github.com/ossrs/srs/issues/418 [bug #509]: https://github.com/ossrs/srs/issues/509 +[bug #511]: https://github.com/ossrs/srs/issues/511 [bug #xxxxxxxxxx]: https://github.com/ossrs/srs/issues/xxxxxxxxxx [exo #828]: https://github.com/google/ExoPlayer/pull/828 diff --git a/trunk/src/app/srs_app_rtmp_conn.cpp b/trunk/src/app/srs_app_rtmp_conn.cpp index c4a2bef1b..1b1dcc0b9 100644 --- a/trunk/src/app/srs_app_rtmp_conn.cpp +++ b/trunk/src/app/srs_app_rtmp_conn.cpp @@ -479,8 +479,11 @@ int SrsRtmpConn::on_reload_vhost_removed(string vhost) // if the vhost connected is removed, disconnect the client. srs_trace("vhost %s removed/disabled, close client url=%s", vhost.c_str(), req->get_stream_url().c_str()); - - srs_close_stfd(stfd); + + // should never close the fd in another thread, + // one fd should managed by one thread, we should use interrupt instead. + // so we just ignore the vhost enabled event. + //srs_close_stfd(stfd); return ret; } diff --git a/trunk/src/app/srs_app_st.cpp b/trunk/src/app/srs_app_st.cpp index cc095fa7a..ab36243a1 100644 --- a/trunk/src/app/srs_app_st.cpp +++ b/trunk/src/app/srs_app_st.cpp @@ -564,13 +564,9 @@ int srs_st_init() void srs_close_stfd(st_netfd_t& stfd) { if (stfd) { - int fd = st_netfd_fileno(stfd); - st_netfd_close(stfd); - stfd = NULL; - - // st does not close it sometimes, - // close it manually. - close(fd); + // we must ensure the close is ok. + int err = st_netfd_close(stfd); + srs_assert(err != -1); } } diff --git a/trunk/src/app/srs_app_st.hpp b/trunk/src/app/srs_app_st.hpp index 82e9d3f22..480c6b0c5 100644 --- a/trunk/src/app/srs_app_st.hpp +++ b/trunk/src/app/srs_app_st.hpp @@ -254,6 +254,7 @@ public: extern int srs_st_init(); // close the netfd, and close the underlayer fd. +// @remark when close, user must ensure io completed. extern void srs_close_stfd(st_netfd_t& stfd); #endif diff --git a/trunk/src/core/srs_core.hpp b/trunk/src/core/srs_core.hpp index c4ca91f57..bf8c4faa4 100644 --- a/trunk/src/core/srs_core.hpp +++ b/trunk/src/core/srs_core.hpp @@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // current release version #define VERSION_MAJOR 3 #define VERSION_MINOR 0 -#define VERSION_REVISION 210 +#define VERSION_REVISION 211 // generated by configure, only macros. #include