hlsdemux2: Fix reference leak of variant stream
authorJan Schmidt <jan@centricular.com>
Wed, 10 Aug 2022 19:17:05 +0000 (05:17 +1000)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Fri, 12 Aug 2022 13:52:59 +0000 (13:52 +0000)
When switching back to the previous variant stream
in gst_hls_demux_change_playlist(), fix a couple of
paths that would leak a reference to the previous
variant.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2873>

subprojects/gst-plugins-good/ext/adaptivedemux2/hls/gsthlsdemux.c

index da5c8bb..9995ccd 100644 (file)
@@ -2673,16 +2673,22 @@ retry_failover_protection:
     }
 
     gst_hls_demux_set_current_variant (demux, previous_variant);
+
     /*  Try a lower bitrate (or stop if we just tried the lowest) */
     if (previous_variant->iframe) {
       lowest_ivariant = demux->master->iframe_variants->data;
-      if (new_bandwidth == lowest_ivariant->bandwidth)
+      if (new_bandwidth == lowest_ivariant->bandwidth) {
+        gst_hls_variant_stream_unref (previous_variant);
         return FALSE;
+      }
     } else {
       lowest_variant = demux->master->variants->data;
-      if (new_bandwidth == lowest_variant->bandwidth)
+      if (new_bandwidth == lowest_variant->bandwidth) {
+        gst_hls_variant_stream_unref (previous_variant);
         return FALSE;
+      }
     }
+    gst_hls_variant_stream_unref (previous_variant);
     return gst_hls_demux_change_playlist (demux, new_bandwidth - 1, changed);
   }