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