From e00937e387834af5e80758dd40e04528a5a70d54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Haibo=20Chen=28=E9=99=88=E6=B5=B7=E5=8D=9A=29?= <495810242@qq.com> Date: Wed, 30 Apr 2025 12:09:31 +0800 Subject: [PATCH] Fix memory leaks from errors skipping resource release. v7.0.32 (#4308) --------- Co-authored-by: winlin Co-authored-by: john --------- Co-authored-by: john --- trunk/doc/CHANGELOG.md | 1 + trunk/src/app/srs_app_rtc_source.cpp | 17 ++++++++++++----- trunk/src/core/srs_core_version7.hpp | 2 +- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/trunk/doc/CHANGELOG.md b/trunk/doc/CHANGELOG.md index 148a20d37..f6b81c859 100644 --- a/trunk/doc/CHANGELOG.md +++ b/trunk/doc/CHANGELOG.md @@ -7,6 +7,7 @@ The changelog for SRS. ## SRS 7.0 Changelog +* v7.0, 2025-04-30, Merge [#4308](https://github.com/ossrs/srs/pull/4308): Fix memory leaks from errors skipping resource release. v7.0.32 (#4308) * v7.0, 2025-04-26, Merge [#4292](https://github.com/ossrs/srs/pull/4309): Support custom deleter for SrsUniquePtr. v7.0.31 (#4309) * v7.0, 2025-03-21, Merge [#4292](https://github.com/ossrs/srs/pull/4292): Typo: "forked" process in log output. v7.0.30 (#4292) * v7.0, 2025-03-21, Merge [#4294](https://github.com/ossrs/srs/pull/4294): Build: update build version to v7. v7.0.29 (#4294) diff --git a/trunk/src/app/srs_app_rtc_source.cpp b/trunk/src/app/srs_app_rtc_source.cpp index ddee477c4..9292ccc1b 100644 --- a/trunk/src/app/srs_app_rtc_source.cpp +++ b/trunk/src/app/srs_app_rtc_source.cpp @@ -1045,6 +1045,15 @@ srs_error_t SrsRtcRtpBuilder::package_opus(SrsAudioFrame* audio, SrsRtpPacket* p return err; } +static void free_packets(vector* pkts) { + if (!pkts) return; + + for (size_t i = 0; i < pkts->size(); i++) { + srs_freep((*pkts)[i]); + } + pkts->clear(); +} + srs_error_t SrsRtcRtpBuilder::on_video(SrsSharedPtrMessage* msg) { srs_error_t err = srs_success; @@ -1094,6 +1103,9 @@ srs_error_t SrsRtcRtpBuilder::on_video(SrsSharedPtrMessage* msg) // If merge Nalus, we pcakges all NALUs(samples) as one NALU, in a RTP or FUA packet. vector pkts; + // auto free when exit + SrsUniquePtr> pkts_ptr(&pkts, free_packets); + if (merge_nalus && nn_samples > 1) { if ((err = package_nalus(msg, samples, pkts)) != srs_success) { return srs_error_wrap(err, "package nalus as one"); @@ -1393,11 +1405,6 @@ srs_error_t SrsRtcRtpBuilder::consume_packets(vector& pkts) } } - for (int i = 0; i < (int)pkts.size(); i++) { - SrsRtpPacket* pkt = pkts[i]; - srs_freep(pkt); - } - return err; } diff --git a/trunk/src/core/srs_core_version7.hpp b/trunk/src/core/srs_core_version7.hpp index a58a9383c..ae5fb1d33 100644 --- a/trunk/src/core/srs_core_version7.hpp +++ b/trunk/src/core/srs_core_version7.hpp @@ -9,6 +9,6 @@ #define VERSION_MAJOR 7 #define VERSION_MINOR 0 -#define VERSION_REVISION 31 +#define VERSION_REVISION 32 #endif \ No newline at end of file