From da5d041227fb2c17c11b638d0caac1fe16cdc9c1 Mon Sep 17 00:00:00 2001
From: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com>
Date: Mon, 29 May 2023 18:19:48 -0400
Subject: [PATCH] videoprovider: do not remove the FrameObject when
 unsubscribing

The end of the lifetime of the FrameObject should be determined by the underlying renderer.

Change-Id: I91026764a20a8451d6e71ffa98ee8cbea55272c4
---
 src/app/videoprovider.cpp | 15 ++-------------
 1 file changed, 2 insertions(+), 13 deletions(-)

diff --git a/src/app/videoprovider.cpp b/src/app/videoprovider.cpp
index e37d4bb45..088605b85 100644
--- a/src/app/videoprovider.cpp
+++ b/src/app/videoprovider.cpp
@@ -103,27 +103,16 @@ VideoProvider::subscribe(QObject* obj, const QString& id)
 void
 VideoProvider::unsubscribe(QObject* obj)
 {
-    QString id;
-
-    renderersMutex_.lockForRead();
+    QReadLocker lk(&renderersMutex_);
     for (auto& pair : renderers_) {
         QWriteLocker lock(&pair.second.subscribersMutex);
         if (pair.second.subscribers.remove(static_cast<QVideoSink*>(obj))) {
             qDebug().noquote() << QString("Removed sink: 0x%1 from subscribers for id: %2")
                                       .arg((quintptr) obj, QT_POINTER_SIZE, 16, QChar('0'))
                                       .arg(pair.first);
-            if (!pair.second.active && pair.second.subscribers.isEmpty())
-                id = pair.first;
-            break;
+            return;
         }
     }
-    renderersMutex_.unlock();
-
-    if (!id.isEmpty()) {
-        renderersMutex_.lockForWrite();
-        renderers_.erase(id);
-        renderersMutex_.unlock();
-    }
 }
 
 QString
-- 
GitLab