vlc/vlc-3.0 | branch: master | Alexandre Janniaux <[email protected]> | Wed 
Jul 24 10:02:06 2019 +0200| [493ab98a131e87c006284987fd6674942faf7721] | 
committer: Hugo Beauzée-Luyssen

demux: mkv: fix vector erase in destructor

Ref #22474

Signed-off-by: Steve Lhomme <[email protected]>
Signed-off-by: Hugo Beauzée-Luyssen <[email protected]>
(cherry picked from commit ca086631dc1a39f1882976d9ec525176ada1aa9e)
Signed-off-by: Hugo Beauzée-Luyssen <[email protected]>

> http://git.videolan.org/gitweb.cgi/vlc/vlc-3.0.git/?a=commit;h=493ab98a131e87c006284987fd6674942faf7721
---

 modules/demux/mkv/demux.cpp | 36 ++++++++++++++----------------------
 1 file changed, 14 insertions(+), 22 deletions(-)

diff --git a/modules/demux/mkv/demux.cpp b/modules/demux/mkv/demux.cpp
index 804d979b1b..7823ca1940 100644
--- a/modules/demux/mkv/demux.cpp
+++ b/modules/demux/mkv/demux.cpp
@@ -701,28 +701,20 @@ bool demux_sys_t::PreloadLinked()
 
 void demux_sys_t::FreeUnused()
 {
-    for (std::vector<matroska_stream_c*>::reverse_iterator i = 
streams.rbegin();
-         i != streams.rend(); ++i)
-    {
-        matroska_stream_c *p_s = *i;
-        if( !p_s->isUsed() )
-        {
-            std::advance(i, 1);
-            streams.erase( i.base() );
-            delete p_s;
-        }
-    }
-    for (std::vector<matroska_segment_c*>::reverse_iterator i = 
opened_segments.rbegin();
-         i != opened_segments.rend(); ++i)
-    {
-        matroska_segment_c *p_sg = *i;
-        if( !p_sg->b_preloaded )
-        {
-            std::advance(i, 1);
-            opened_segments.erase( i.base() );
-            delete p_sg;
-        }
-    }
+    auto sIt = std::remove_if(begin(streams), end(streams), [](const 
matroska_stream_c* p_s) {
+        return !p_s->isUsed();
+    });
+    for (auto it = sIt; it != end(streams); ++it)
+        delete *it;
+    streams.erase(sIt, end(streams));
+
+    auto sgIt = std::remove_if(begin(opened_segments), end(opened_segments),
+                [](const matroska_segment_c* p_sg) {
+        return !p_sg->b_preloaded;
+    });
+    for (auto it = sgIt; it != end(opened_segments); ++it)
+        delete *it;
+    opened_segments.erase(sgIt, end(opened_segments));
 }
 
 bool demux_sys_t::PreparePlayback( virtual_segment_c & new_vsegment, mtime_t 
i_mk_date )

_______________________________________________
vlc-commits mailing list
[email protected]
https://mailman.videolan.org/listinfo/vlc-commits

Reply via email to