diff --git a/README.md b/README.md index 496cbb58c4..2c489236e7 100755 --- a/README.md +++ b/README.md @@ -207,6 +207,7 @@ Please select your language: ### V2 changes +* 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 @@ -1370,6 +1371,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 [bug #735]: https://github.com/ossrs/srs/issues/735 diff --git a/trunk/src/app/srs_app_edge.cpp b/trunk/src/app/srs_app_edge.cpp index f9baa59137..8de0c05e22 100644 --- a/trunk/src/app/srs_app_edge.cpp +++ b/trunk/src/app/srs_app_edge.cpp @@ -483,7 +483,6 @@ void SrsEdgeForwarder::stop() { pthread->stop(); queue->clear(); - srs_freep(sdk); } diff --git a/trunk/src/app/srs_app_rtmp_conn.cpp b/trunk/src/app/srs_app_rtmp_conn.cpp index 7a056d2dbd..19005075bf 100644 --- a/trunk/src/app/srs_app_rtmp_conn.cpp +++ b/trunk/src/app/srs_app_rtmp_conn.cpp @@ -138,9 +138,9 @@ int SrsSimpleRtmpClient::connect() void SrsSimpleRtmpClient::close() { + kbps->set_io(NULL, NULL); srs_freep(client); srs_freep(transport); - kbps->set_io(NULL, NULL); } int SrsSimpleRtmpClient::connect_app() diff --git a/trunk/src/protocol/srs_protocol_kbps.hpp b/trunk/src/protocol/srs_protocol_kbps.hpp index ff6f0cec02..7e7d9012a8 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: /**