diff --git a/README.md b/README.md
index 429ff69c6..265b51595 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 15e78eaee..754f9cc0a 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 9fd95fac3..7698cb5bc 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 546c538e4..77ee2d257 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 dd5a8ada0..0bb7f88b6 100644
--- a/trunk/src/protocol/srs_protocol_kbps.hpp
+++ b/trunk/src/protocol/srs_protocol_kbps.hpp
@@ -161,7 +161,7 @@ public:
* 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 @@ public:
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:
/**