diff options
author | Matthias P. Braendli <matthias.braendli@mpb.li> | 2025-09-29 14:45:31 +0200 |
---|---|---|
committer | Matthias P. Braendli <matthias.braendli@mpb.li> | 2025-09-29 14:45:31 +0200 |
commit | d8fab73aeb2c4401bbd88024556a7726ff2129ea (patch) | |
tree | 4e68fc3d3d9de4f40ffb02747474a9e46f69d371 | |
parent | c84727c8ec0f99d66d1ad7d4716de79b6235d4d1 (diff) | |
download | dabmux-d8fab73aeb2c4401bbd88024556a7726ff2129ea.tar.gz dabmux-d8fab73aeb2c4401bbd88024556a7726ff2129ea.tar.bz2 dabmux-d8fab73aeb2c4401bbd88024556a7726ff2129ea.zip |
common 53fdfd2: Fix race condition in TCPDataDispatcher get_stats
-rw-r--r-- | lib/Socket.cpp | 1 | ||||
-rw-r--r-- | lib/Socket.h | 2 | ||||
-rw-r--r-- | lib/ThreadsafeQueue.h | 2 |
3 files changed, 3 insertions, 2 deletions
diff --git a/lib/Socket.cpp b/lib/Socket.cpp index 5c920d7..33c9c73 100644 --- a/lib/Socket.cpp +++ b/lib/Socket.cpp @@ -1152,6 +1152,7 @@ void TCPDataDispatcher::process() std::vector<TCPConnection::stats_t> TCPDataDispatcher::get_stats() const { std::vector<TCPConnection::stats_t> s; + auto lock = unique_lock<mutex>(m_mutex); for (const auto& conn : m_connections) { s.push_back(conn.get_stats()); } diff --git a/lib/Socket.h b/lib/Socket.h index 29b618a..b9a40ee 100644 --- a/lib/Socket.h +++ b/lib/Socket.h @@ -298,7 +298,7 @@ class TCPDataDispatcher std::thread m_listener_thread; TCPSocket m_listener_socket; - std::mutex m_mutex; + mutable std::mutex m_mutex; std::deque<std::vector<uint8_t> > m_preroll_queue; std::list<TCPConnection> m_connections; }; diff --git a/lib/ThreadsafeQueue.h b/lib/ThreadsafeQueue.h index 13bc19e..a8d2e85 100644 --- a/lib/ThreadsafeQueue.h +++ b/lib/ThreadsafeQueue.h @@ -31,7 +31,7 @@ #include <functional> #include <mutex> #include <condition_variable> -#include <queue> +#include <deque> #include <utility> #include <cassert> |