From 314d3df0cdda590dd81d1a44a1fd1d2df1ba58b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Blin?= <sebastien.blin@savoirfairelinux.com> Date: Fri, 17 May 2024 08:09:20 -0400 Subject: [PATCH] jamiaccount: avoid deadlock on shutdown If the multiplexed socket is shutdown, this will lock the socket then convModule and other threads can do the reverse causing a deadlock Fix ut_conversation_call sporadic deadlocks GitLab: #991 Change-Id: I5639b9189b7365cf24abeebf4bb80a89ab3b73ff --- src/jamidht/jamiaccount.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/jamidht/jamiaccount.cpp b/src/jamidht/jamiaccount.cpp index c5e581c18a..57dc05e8db 100644 --- a/src/jamidht/jamiaccount.cpp +++ b/src/jamidht/jamiaccount.cpp @@ -2216,9 +2216,11 @@ JamiAccount::convModule(bool noCreation) dht::ThreadPool::io().run([w, cb = std::move(cb), socket=std::move(socket), convId] { if (socket) { socket->onShutdown([w, deviceId = socket->deviceId(), convId] { - if (auto shared = w.lock()) - shared->convModule()->removeGitSocket(deviceId.toString(), - convId); + dht::ThreadPool::io().run([w, deviceId, convId] { + if (auto shared = w.lock()) + shared->convModule()->removeGitSocket(deviceId.toString(), + convId); + }); }); if (!cb(socket)) socket->shutdown(); -- GitLab