From 67c38a17d9a4cfa5862f734dddaedf7a8a4cb895 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Blin?= <sebastien.blin@savoirfairelinux.com> Date: Thu, 29 Oct 2020 16:05:56 -0400 Subject: [PATCH] multiplexed_socket: lock callback while accessed Change-Id: I9b3bc097fd3be9899316133ac0f5161170b44281 --- src/jamidht/multiplexed_socket.cpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/jamidht/multiplexed_socket.cpp b/src/jamidht/multiplexed_socket.cpp index 3422b9a337..0a9c485a1a 100644 --- a/src/jamidht/multiplexed_socket.cpp +++ b/src/jamidht/multiplexed_socket.cpp @@ -290,15 +290,18 @@ MultiplexedSocket::Impl::handleChannelPacket(uint16_t channel, const std::vector std::lock_guard<std::mutex> lkSockets(socketsMutex); sockets.erase(sockIt); } else { - std::unique_lock<std::mutex> lk(channelCbsMtx_); - auto cb = channelCbs_.find(channel); - if (cb != channelCbs_.end()) { - lk.unlock(); - if (cb->second) - cb->second(&pkt[0], pkt.size()); + GenericSocket<uint8_t>::RecvCb cb; + { + std::lock_guard<std::mutex> lk(channelCbsMtx_); + auto cbIt = channelCbs_.find(channel); + if (cbIt != channelCbs_.end()) { + cb = cbIt->second; + } + } + if (cb) { + cb(&pkt[0], pkt.size()); return; } - lk.unlock(); dataIt->second->buf.insert(dataIt->second->buf.end(), std::make_move_iterator(pkt.begin()), std::make_move_iterator(pkt.end())); -- GitLab