From 6706bda42cf8a8fd4e6e5d255a1f8234154c79f9 Mon Sep 17 00:00:00 2001 From: winlin Date: Sun, 22 Jan 2017 13:12:56 +0800 Subject: [PATCH] for #752, release the io then free it for kbps. 2.0.232 --- README.md | 2 ++ trunk/src/app/srs_app_edge.cpp | 6 ++++-- trunk/src/app/srs_app_forward.cpp | 3 ++- trunk/src/core/srs_core.hpp | 2 +- trunk/src/protocol/srs_protocol_kbps.hpp | 19 ++++++++++--------- 5 files changed, 19 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 429ff69c6f..265b515957 100755 --- a/README.md +++ b/README.md @@ -346,6 +346,7 @@ Remark: ## History +* v2.0, 2017-01-22, for [#752][bug #752] release the io then free it for kbps. 2.0.232 * v2.0, 2017-01-18, fix [#750][bug #750] use specific error code for dns resolve. 2.0.231 * v2.0, 2017-01-18, [2.0 beta4(2.0.230)][r2.0b4] released. 86334 lines. * v2.0, 2017-01-18, fix [#749][bug #749], timestamp overflow for ATC. 2.0.230 @@ -1283,6 +1284,7 @@ Winlin [bug #740]: https://github.com/ossrs/srs/issues/740 [bug #749]: https://github.com/ossrs/srs/issues/749 [bug #750]: https://github.com/ossrs/srs/issues/750 +[bug #752]: https://github.com/ossrs/srs/issues/752 [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_edge.cpp b/trunk/src/app/srs_app_edge.cpp index 15e78eaeec..754f9cc0ab 100755 --- a/trunk/src/app/srs_app_edge.cpp +++ b/trunk/src/app/srs_app_edge.cpp @@ -110,9 +110,9 @@ void SrsEdgeIngester::stop() close_underlayer_socket(); + kbps->set_io(NULL, NULL); srs_freep(client); srs_freep(io); - kbps->set_io(NULL, NULL); // notice to unpublish. _source->on_unpublish(); @@ -376,6 +376,7 @@ int SrsEdgeIngester::connect_server(string& ep_server, string& ep_port) return ret; } + kbps->set_io(NULL, NULL); srs_freep(client); srs_freep(io); @@ -478,9 +479,9 @@ void SrsEdgeForwarder::stop() queue->clear(); + kbps->set_io(NULL, NULL); srs_freep(client); srs_freep(io); - kbps->set_io(NULL, NULL); } #define SYS_MAX_EDGE_SEND_MSGS 128 @@ -626,6 +627,7 @@ int SrsEdgeForwarder::connect_server(string& ep_server, string& ep_port) return ret; } + kbps->set_io(NULL, NULL); srs_freep(client); srs_freep(io); diff --git a/trunk/src/app/srs_app_forward.cpp b/trunk/src/app/srs_app_forward.cpp index 9fd95fac3b..7698cb5bce 100755 --- a/trunk/src/app/srs_app_forward.cpp +++ b/trunk/src/app/srs_app_forward.cpp @@ -150,9 +150,9 @@ void SrsForwarder::on_unpublish() close_underlayer_socket(); + kbps->set_io(NULL, NULL); srs_freep(client); srs_freep(io); - kbps->set_io(NULL, NULL); } int SrsForwarder::on_meta_data(SrsSharedPtrMessage* shared_metadata) @@ -313,6 +313,7 @@ int SrsForwarder::connect_server(string& ep_server, string& ep_port) return ret; } + kbps->set_io(NULL, NULL); srs_freep(client); srs_freep(io); diff --git a/trunk/src/core/srs_core.hpp b/trunk/src/core/srs_core.hpp index 546c538e47..77ee2d2578 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 2 #define VERSION_MINOR 0 -#define VERSION_REVISION 231 +#define VERSION_REVISION 232 // generated by configure, only macros. #include diff --git a/trunk/src/protocol/srs_protocol_kbps.hpp b/trunk/src/protocol/srs_protocol_kbps.hpp index dd5a8ada09..0bb7f88b63 100644 --- a/trunk/src/protocol/srs_protocol_kbps.hpp +++ b/trunk/src/protocol/srs_protocol_kbps.hpp @@ -161,7 +161,7 @@ class IKbpsDelta * SrsKbps* kbps = ...; * kbps->set_io(in, out); * // both kbps->get_recv_bytes() and kbps->get_send_bytes() are available. -* // we can use the kbps as the data source of another kbps: + * // we can use the kbps as the data source of another kbps: * SrsKbps* user = ...; * user->set_io(kbps, kbps); * the server never know how many bytes already send/recv, for the connection maybe closed. @@ -176,14 +176,15 @@ class SrsKbps : public virtual ISrsProtocolStatistic, public virtual IKbpsDelta virtual ~SrsKbps(); public: /** - * set io to start new session. - * set the underlayer reader/writer, - * if the io destroied, for instance, the forwarder reconnect, - * user must set the io of SrsKbps to NULL to continue to use the kbps object. - * @param in the input stream statistic. can be NULL. - * @param out the output stream statistic. can be NULL. - * @remark if in/out is NULL, use the cached data for kbps. - */ + * set io to start new session. + * set the underlayer reader/writer, + * if the io destroied, for instance, the forwarder reconnect, + * user must set the io of SrsKbps to NULL to continue to use the kbps object. + * @param in the input stream statistic. can be NULL. + * @param out the output stream statistic. can be NULL. + * @remark if in/out is NULL, use the cached data for kbps. + * @remark User must set_io(NULL, NULL) then free the in and out. + */ virtual void set_io(ISrsProtocolStatistic* in, ISrsProtocolStatistic* out); public: /**