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