diff --git a/src/app/videoprovider.cpp b/src/app/videoprovider.cpp index e37d4bb456761522d74afd6db4c9c55bbb16d49b..088605b85fd71fd4ada98000f6180aa5e6103969 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