SyncModule: deadlock
Thread 65 (Thread 0x7fff54ff9640 (LWP 3382598) "ut_account_arch"):
#0 0x00007ffff6489c10 in __lll_lock_wait () from /lib64/libc.so.6
#1 0x00007ffff64901c2 in pthread_mutex_lock@@GLIBC_2.2.5 () from /lib64/libc.so.6
#2 0x0000000000486ed7 in __gthread_mutex_lock (__mutex=0x7fff5801e430) at /usr/include/c++/12/x86_64-redhat-linux/bits/gthr-default.h:749
#3 0x000000000048ce8a in std::mutex::lock (this=0x7fff5801e430) at /usr/include/c++/12/bits/std_mutex.h:100
#4 0x00000000004bec7a in std::lock_guard<std::mutex>::lock_guard (this=0x7fff54ff5608, __m=...) at /usr/include/c++/12/bits/std_mutex.h:229
#5 0x0000000000732332 in operator() (__closure=0x7fff58005d30) at jamidht/sync_module.cpp:165
#6 0x0000000000734436 in std::__invoke_impl<void, jami::SyncModule::cacheSyncConnection(std::shared_ptr<jami::ChannelSocket>&&, const std::string&, const jami::DeviceId&)::<lambda()>&>(std::__invoke_other, struct {...} &) (__f=...) at /usr/include/c++/12/bits/invoke.h:61
#7 0x0000000000733f35 in std::__invoke_r<void, jami::SyncModule::cacheSyncConnection(std::shared_ptr<jami::ChannelSocket>&&, const std::string&, const jami::DeviceId&)::<lambda()>&>(struct {...} &) (__fn=...) at /usr/include/c++/12/bits/invoke.h:111
#8 0x0000000000733b36 in std::_Function_handler<void(), jami::SyncModule::cacheSyncConnection(std::shared_ptr<jami::ChannelSocket>&&, const std::string&, const jami::DeviceId&)::<lambda()> >::_M_invoke(const std::_Any_data &) (__functor=...) at /usr/include/c++/12/bits/std_function.h:290
#9 0x000000000048ef58 in std::function<void ()>::operator()() const (this=0x7fff60017720) at /usr/include/c++/12/bits/std_function.h:591
#10 0x00000000008f99fb in jami::ChannelSocket::onShutdown(std::function<void ()>&&) (this=0x7fff58000dc0, cb=...) at connectivity/multiplexed_socket.cpp:1128
#11 0x00000000007329d2 in jami::SyncModule::cacheSyncConnection (this=0x7fff5c008d20, socket=..., peerId="884ea80e4d805822aa289fe4928dae6fdbdd624e", device=...) at jamidht/sync_module.cpp:161
#12 0x00000000007307dc in jami::SyncChannelHandler::onReady (this=0x7fffd4162a20, cert=std::shared_ptr<dht::crypto::Certificate> (use count 2, weak count 0) = {...}, channel=std::shared_ptr<jami::ChannelSocket> (use count 4, weak count 0) = {...}) at jamidht/sync_channel_handler.cpp:73
#13 0x0000000000680089 in operator() (__closure=0x7fffd410a740, deviceId=..., name="sync://b69319185290dca01e37b1102ac026221e63a3aad230122e42418259fdb69aec", channel=std::shared_ptr<jami::ChannelSocket> (empty) = {...}) at jamidht/jamia--Type <RET> for more, q to quit, c to continue without paging--
ccount.cpp:2097
#14 0x00000000006b3314 in std::__invoke_impl<void, jami::JamiAccount::doRegister_()::<lambda(const jami::DeviceId&, const std::string&, std::shared_ptr<jami::ChannelSocket>)>&, const dht::Hash<32>&, const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::shared_ptr<jami::ChannelSocket> >(std::__invoke_other, struct {...} &) (__f=...) at /usr/include/c++/12/bits/invoke.h:61
#15 0x00000000006aa45b in std::__invoke_r<void, jami::JamiAccount::doRegister_()::<lambda(const jami::DeviceId&, const std::string&, std::shared_ptr<jami::ChannelSocket>)>&, const dht::Hash<32>&, const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::shared_ptr<jami::ChannelSocket> >(struct {...} &) (__fn=...) at /usr/include/c++/12/bits/invoke.h:111
#16 0x00000000006a1389 in std::_Function_handler<void(const dht::Hash<32>&, const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::shared_ptr<jami::ChannelSocket>), jami::JamiAccount::doRegister_()::<lambda(const jami::DeviceId&, const std::string&, std::shared_ptr<jami::ChannelSocket>)> >::_M_invoke(const std::_Any_data &, const dht::Hash<32> &, const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > &, std::shared_ptr<jami::ChannelSocket> &&) (__functor=..., __args#0=..., __args#1="sync://b69319185290dca01e37b1102ac026221e63a3aad230122e42418259fdb69aec", __args#2=...) at /usr/include/c++/12/bits/std_function.h:290
#17 0x00000000008dadf2 in std::function<void (dht::Hash<32ul> const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::shared_ptr<jami::ChannelSocket>)>::operator()(dht::Hash<32ul> const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::shared_ptr<jami::ChannelSocket>) const (this=0x7fffd410a740, __args#0=..., __args#1="sync://b69319185290dca01e37b1102ac026221e63a3aad230122e42418259fdb69aec", __args#2=std::shared_ptr<jami::ChannelSocket> (empty) = {...}) at /usr/include/c++/12/bits/std_function.h:591
#18 0x00000000008c4613 in operator() (__closure=0x7fff30006a10, deviceId=..., socket=std::shared_ptr<jami::ChannelSocket> (use count 4, weak count 0) = {...}) at connectivity/connectionmanager.cpp:1051
#19 0x00000000008d157d in std::__invoke_impl<void, jami::ConnectionManager::Impl::addNewMultiplexedSocket(const CallbackId&, const std::shared_ptr<jami::ConnectionInfo>&)::<lambda(const jami::DeviceId&, const std::shared_ptr<jami::ChannelSocket>&)>&, const dht::Hash<32>&, const std::shared_ptr<jami::ChannelSocket>&>(std::__invoke_other, struct {...} &) (__f=...) at /usr/include/c++/12/bits/invoke.h:61
#20 0x00000000008cdf27 in std::__invoke_r<void, jami::ConnectionManager::Impl::addNewMultiplexedSocket(const CallbackId&, const std::shared_ptr<jami::ConnectionInfo>&)::<lambda(const jami::DeviceId&, const std::shared_ptr<jami::ChannelSocket>&)>&, const dht::Hash<32>&, const std::shared_ptr<jami::ChannelSocket>&>(struct {...} &) (__fn=...) at /usr/include/c++/12/bits/invoke.h:111
#21 0x00000000008ca49e in std::_Function_handler<void(const dht::Hash<32>&, const std::shared_ptr<jami::ChannelSocket>&), jami::ConnectionManager::Impl::addNewMultiplexedSocket(const CallbackId&, const std::shared_ptr<jami::ConnectionInfo>&)::<lambda(const jami::DeviceId&, const std::shared_ptr<jami::ChannelSocket>&)> >::_M_invoke(const std::_Any_data &, const dht::Hash<32> &, const std::shared_ptr<jami::ChannelSocket> &) (__functor=..., __args#0=..., __args#1=std::shared_ptr<jami::ChannelSocket> (use count 4, weak count 0) = {...}) at /usr/include/c++/12/bits/std_function.h:290
#22 0x00000000008feac1 in std::function<void (dht::Hash<32ul> const&, std::shared_ptr<jami::ChannelSocket> const&)>::operator()(dht::Hash<32ul> const&, std::shared_ptr<jami::ChannelSocket> const&) const (this=0x7fff3000f440, __args#0=..., __args#1=std::shared_ptr<jami::ChannelSocket> (use count 4, weak count 0) = {...}) at /usr/include/c++/12/bits/std_function.h:591
#23 0x00000000008f5ea5 in jami::MultiplexedSocket::Impl::onRequest (this=0x7fff3000f330, name="sync://b69319185290dca01e37b1102ac026221e63a3aad230122e42418259fdb69aec", channel=17281) at connectivity/multiplexed_socket.cpp:402
#24 0x00000000008f6260 in operator() (__closure=0x7fff34002c70) at connectivity/multiplexed_socket.cpp:435
#25 0x00000000008fbbba in std::__invoke_impl<void, jami::MultiplexedSocket::Impl::handleControlPacket(std::vector<unsigned char>&&)::<lambda()>&>(std::__invoke_other, struct {...} &) (__f=...) at /usr/include/c++/12/bits/invoke.h:61
#26 0x00000000008fb4a5 in std::__invoke_r<void, jami::MultiplexedSocket::Impl::handleControlPacket(std::vector<unsigned char>&&)::<lambda()>&>(struct {...} &) (__fn=...) at /usr/include/c++/12/bits/invoke.h:111
#27 0x00000000008faab5 in std::_Function_handler<void(), jami::MultiplexedSocket::Impl::handleControlPacket(std::vector<unsigned char>&&)::<lambda()> >::_M_invoke(const std::_Any_data &) (__functor=...) at /usr/include/c++/12/bits/std_function.h:290
#28 0x000000000137570d in std::thread::_State_impl<std::thread::_Invoker<std::tuple<dht::ThreadPool::run(std::function<void ()>&&)::{lambda()#1}> > >::_M_run() ()
#29 0x00007ffff68dbb03 in execute_native_thread_routine () from /lib64/libstdc++.so.6
#30 0x00007ffff648cded in start_thread () from /lib64/libc.so.6
#31 0x00007ffff6512370 in clone3 () from /lib64/libc.so.6
Double lock on syncConnectionsMtx_
Edited by Sébastien Blin