From 2aa86ccf01cc2e2682192b928da822c660d5b08b Mon Sep 17 00:00:00 2001 From: Thulinma Date: Wed, 10 Oct 2018 17:10:18 +0200 Subject: [PATCH] Fix memory leak in live inputs --- lib/dtsc.h | 1 + lib/dtscmeta.cpp | 4 ++++ src/io.cpp | 3 +++ 3 files changed, 8 insertions(+) diff --git a/lib/dtsc.h b/lib/dtsc.h index bede047e..1dc8bf8e 100644 --- a/lib/dtsc.h +++ b/lib/dtsc.h @@ -282,6 +282,7 @@ namespace DTSC { Track(); Track(JSON::Value & trackRef); Track(Scan & trackRef); + void clearParts(); inline operator bool() const { return (parts.size() && keySizes.size() && (keySizes.size() == keys.size())); diff --git a/lib/dtscmeta.cpp b/lib/dtscmeta.cpp index 6f82daf5..77b48851 100644 --- a/lib/dtscmeta.cpp +++ b/lib/dtscmeta.cpp @@ -1297,6 +1297,10 @@ namespace DTSC { fragments.rbegin()->setSize(fragments.rbegin()->getSize() + packDataSize); } + void Track::clearParts(){ + while (fragments.size() > 1){removeFirstKey();} + } + /// Removes the first buffered key, including any fragments it was part of void Track::removeFirstKey(){ HIGH_MSG("Erasing key %d:%lu", trackID, keys[0].getNumber()); diff --git a/src/io.cpp b/src/io.cpp index 0decc495..d29c7a34 100644 --- a/src/io.cpp +++ b/src/io.cpp @@ -316,6 +316,9 @@ namespace Mist { if (myMeta.live){ myMeta.update(pack); + for (std::map::iterator it = myMeta.tracks.begin(); it != myMeta.tracks.end(); it++) { + it->second.clearParts(); + } } //End of brain melt