From 996c7d56971412172c594a7549f38ed52f7300f6 Mon Sep 17 00:00:00 2001 From: winlin Date: Wed, 12 May 2021 21:48:11 +0800 Subject: [PATCH] SquashSRS3: Fix bug --- README.md | 2 ++ trunk/src/app/srs_app_http_stream.cpp | 9 +++++---- trunk/src/app/srs_app_http_stream.hpp | 4 ++-- trunk/src/app/srs_app_statistic.cpp | 6 +++++- trunk/src/core/srs_core_version3.hpp | 2 +- 5 files changed, 15 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 4ca0518fc..aeea7a305 100755 --- a/README.md +++ b/README.md @@ -270,6 +270,7 @@ The ports used by SRS: ## V3 changes +* v3.0, 2021-05-12, Fix [#2311][bug #2311], Copy the request for stat client. 3.0.162 * v3.0, 2021-04-28, [3.0 release5(3.0.161)][r3.0r5] released. 122750 lines. * v3.0, 2021-04-28, Upgrade players. 3.0.161 * v3.0, 2021-04-24, [3.0 release4(3.0.160)][r3.0r4] released. 122750 lines. @@ -1906,6 +1907,7 @@ Winlin [bug #1987]: https://github.com/ossrs/srs/issues/1987 [bug #1548]: https://github.com/ossrs/srs/issues/1548 [bug #1694]: https://github.com/ossrs/srs/issues/1694 +[bug #2311]: https://github.com/ossrs/srs/issues/2311 [bug #413]: https://github.com/ossrs/srs/issues/413 [bug #2091]: https://github.com/ossrs/srs/issues/2091 [bug #1342]: https://github.com/ossrs/srs/issues/1342 diff --git a/trunk/src/app/srs_app_http_stream.cpp b/trunk/src/app/srs_app_http_stream.cpp index 5b32215ec..04a3f7a5a 100755 --- a/trunk/src/app/srs_app_http_stream.cpp +++ b/trunk/src/app/srs_app_http_stream.cpp @@ -76,7 +76,7 @@ SrsBufferCache::~SrsBufferCache() srs_freep(req); } -srs_error_t SrsBufferCache::update(SrsSource* s, SrsRequest* r) +srs_error_t SrsBufferCache::update_auth(SrsSource* s, SrsRequest* r) { srs_freep(req); req = r->copy(); @@ -527,7 +527,7 @@ SrsLiveStream::~SrsLiveStream() srs_freep(req); } -srs_error_t SrsLiveStream::update(SrsSource* s, SrsRequest* r) +srs_error_t SrsLiveStream::update_auth(SrsSource* s, SrsRequest* r) { source = s; @@ -953,9 +953,10 @@ srs_error_t SrsHttpStreamServer::http_mount(SrsSource* s, SrsRequest* r) } srs_trace("http: mount flv stream for sid=%s, mount=%s", sid.c_str(), mount.c_str()); } else { + // The entry exists, we reuse it and update the request of stream and cache. entry = sflvs[sid]; - entry->stream->update(s, r); - entry->cache->update(s, r); + entry->stream->update_auth(s, r); + entry->cache->update_auth(s, r); } if (entry->stream) { diff --git a/trunk/src/app/srs_app_http_stream.hpp b/trunk/src/app/srs_app_http_stream.hpp index 1ba6c1e5a..82d62db39 100755 --- a/trunk/src/app/srs_app_http_stream.hpp +++ b/trunk/src/app/srs_app_http_stream.hpp @@ -46,7 +46,7 @@ private: public: SrsBufferCache(SrsSource* s, SrsRequest* r); virtual ~SrsBufferCache(); - virtual srs_error_t update(SrsSource* s, SrsRequest* r); + virtual srs_error_t update_auth(SrsSource* s, SrsRequest* r); public: virtual srs_error_t start(); virtual srs_error_t dump_cache(SrsConsumer* consumer, SrsRtmpJitterAlgorithm jitter); @@ -189,7 +189,7 @@ private: public: SrsLiveStream(SrsSource* s, SrsRequest* r, SrsBufferCache* c); virtual ~SrsLiveStream(); - virtual srs_error_t update(SrsSource* s, SrsRequest* r); + virtual srs_error_t update_auth(SrsSource* s, SrsRequest* r); public: virtual srs_error_t serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r); private: diff --git a/trunk/src/app/srs_app_statistic.cpp b/trunk/src/app/srs_app_statistic.cpp index e637e7199..4e58e9511 100644 --- a/trunk/src/app/srs_app_statistic.cpp +++ b/trunk/src/app/srs_app_statistic.cpp @@ -460,10 +460,14 @@ srs_error_t SrsStatistic::on_client(SrsContextId cid, SrsRequest* req, ISrsExpir // got client. client->conn = conn; - client->req = req; client->type = type; stream->nb_clients++; vhost->nb_clients++; + + // The req might be freed, in such as SrsLiveStream::update, so we must copy it. + // @see https://github.com/ossrs/srs/issues/2311 + srs_freep(client->req); + client->req = req->copy(); return err; } diff --git a/trunk/src/core/srs_core_version3.hpp b/trunk/src/core/srs_core_version3.hpp index 70a444477..602a57c86 100644 --- a/trunk/src/core/srs_core_version3.hpp +++ b/trunk/src/core/srs_core_version3.hpp @@ -24,6 +24,6 @@ #ifndef SRS_CORE_VERSION3_HPP #define SRS_CORE_VERSION3_HPP -#define SRS_VERSION3_REVISION 161 +#define SRS_VERSION3_REVISION 162 #endif