aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorMatthias P. Braendli <matthias.braendli@mpb.li>2025-09-29 14:45:31 +0200
committerMatthias P. Braendli <matthias.braendli@mpb.li>2025-09-29 14:45:31 +0200
commitd8fab73aeb2c4401bbd88024556a7726ff2129ea (patch)
tree4e68fc3d3d9de4f40ffb02747474a9e46f69d371 /lib
parentc84727c8ec0f99d66d1ad7d4716de79b6235d4d1 (diff)
downloaddabmux-d8fab73aeb2c4401bbd88024556a7726ff2129ea.tar.gz
dabmux-d8fab73aeb2c4401bbd88024556a7726ff2129ea.tar.bz2
dabmux-d8fab73aeb2c4401bbd88024556a7726ff2129ea.zip
common 53fdfd2: Fix race condition in TCPDataDispatcher get_stats
Diffstat (limited to 'lib')
-rw-r--r--lib/Socket.cpp1
-rw-r--r--lib/Socket.h2
-rw-r--r--lib/ThreadsafeQueue.h2
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>