From 78fcaaf7b153e30aaf56a030219fd51fe5a80233 Mon Sep 17 00:00:00 2001 From: winlin Date: Wed, 30 Dec 2020 16:03:28 +0800 Subject: [PATCH] RTC: Fix memory leak --- trunk/src/app/srs_app_rtc_conn.cpp | 14 +++++++++++++- trunk/src/app/srs_app_rtc_source.cpp | 8 +++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/trunk/src/app/srs_app_rtc_conn.cpp b/trunk/src/app/srs_app_rtc_conn.cpp index dc9b46fa6..1bbe5d5b0 100644 --- a/trunk/src/app/srs_app_rtc_conn.cpp +++ b/trunk/src/app/srs_app_rtc_conn.cpp @@ -943,6 +943,18 @@ SrsRtcPublishStream::~SrsRtcPublishStream() source->on_unpublish(); } + for (int i = 0; i < (int)video_tracks_.size(); ++i) { + SrsRtcVideoRecvTrack* track = video_tracks_.at(i); + srs_freep(track); + } + video_tracks_.clear(); + + for (int i = 0; i < (int)audio_tracks_.size(); ++i) { + SrsRtcAudioRecvTrack* track = audio_tracks_.at(i); + srs_freep(track); + } + audio_tracks_.clear(); + srs_freep(timer_); srs_freep(pli_worker_); srs_freep(pli_epp); @@ -1785,7 +1797,7 @@ srs_error_t SrsRtcConnection::add_publisher(SrsRequest* req, const SrsSdp& remot source->set_stream_created(); // Apply the SDP to source. - source->set_stream_desc(stream_desc->copy()); + source->set_stream_desc(stream_desc); // TODO: FIXME: What happends when error? if ((err = create_publisher(req, stream_desc)) != srs_success) { diff --git a/trunk/src/app/srs_app_rtc_source.cpp b/trunk/src/app/srs_app_rtc_source.cpp index f982cab99..b42b681ea 100644 --- a/trunk/src/app/srs_app_rtc_source.cpp +++ b/trunk/src/app/srs_app_rtc_source.cpp @@ -481,6 +481,9 @@ void SrsRtcStream::on_unpublish() h->on_unpublish(); } + // release unpublish stream description. + set_stream_desc(NULL); + // TODO: FIXME: Handle by statistic. } @@ -527,7 +530,10 @@ srs_error_t SrsRtcStream::on_rtp(SrsRtpPacket2* pkt) void SrsRtcStream::set_stream_desc(SrsRtcStreamDescription* stream_desc) { srs_freep(stream_desc_); - stream_desc_ = stream_desc->copy(); + + if (stream_desc) { + stream_desc_ = stream_desc->copy(); + } } std::vector SrsRtcStream::get_track_desc(std::string type, std::string media_name)