From 0b11282d88d8c3690886720a59c240c436363b28 Mon Sep 17 00:00:00 2001 From: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com> Date: Mon, 15 May 2023 16:34:39 -0400 Subject: [PATCH] avmodel: hold lock when erasing renderer Change-Id: If10ad2bf40ce05b0052016123755f4c9dca18097 --- src/libclient/avmodel.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/libclient/avmodel.cpp b/src/libclient/avmodel.cpp index 7939563df..50a6b330f 100644 --- a/src/libclient/avmodel.cpp +++ b/src/libclient/avmodel.cpp @@ -942,15 +942,12 @@ createRenderer(const QString& id, const QSize& res, const QString& shmPath = {}) void AVModelPimpl::addRenderer(const QString& id, const QSize& res, const QString& shmPath) { - // First remove the existing renderer. - renderers_.erase(id); + { + std::lock_guard<std::mutex> lk(renderers_mtx_); + renderers_[id] = createRenderer(id, res, shmPath); + } - // Create a new one and add it. - auto renderer = createRenderer(id, res, shmPath); - std::lock_guard<std::mutex> lk(renderers_mtx_); auto& r = renderers_[id]; - r = std::move(renderer); - renderers_mtx_.unlock(); // Listen and forward id-bound signals upwards. connect( @@ -965,12 +962,14 @@ AVModelPimpl::addRenderer(const QString& id, const QSize& res, const QString& sh this, [this, id](const QSize& size) { Q_EMIT linked_.rendererStarted(id, size); }, Qt::DirectConnection); +#ifdef ENABLE_LIBWRAP connect( r.get(), &Renderer::frameBufferRequested, this, [this, id](AVFrame* frame) { Q_EMIT linked_.frameBufferRequested(id, frame); }, Qt::DirectConnection); +#endif connect( r.get(), &Renderer::frameUpdated, -- GitLab