From: Ensar Sarajčić Date: Thu, 6 Feb 2025 08:29:20 +0000 (+0100) Subject: Add a basic lock in `RemoteLoggerInterface::queueData` for thread safety X-Git-Tag: dnsdist-2.0.0-alpha1~111^2~13 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9cbf0bdadb43a425cbdf1737cceaf613cabe3021;p=thirdparty%2Fpdns.git Add a basic lock in `RemoteLoggerInterface::queueData` for thread safety --- diff --git a/pdns/remote_logger_pool.cc b/pdns/remote_logger_pool.cc index a730b125cc..b1b2bde611 100644 --- a/pdns/remote_logger_pool.cc +++ b/pdns/remote_logger_pool.cc @@ -1,16 +1,15 @@ #include -#include #include #include #include #include "config.h" +#include "lock.hh" #include "remote_logger_pool.hh" RemoteLoggerPool::RemoteLoggerPool(std::vector>&& pool) : - d_pool(std::move(pool)) + d_pool(std::move(pool)), d_pool_it(d_pool.begin()) { - d_pool_it = d_pool.begin(); } [[nodiscard]] std::string RemoteLoggerPool::toString() @@ -28,10 +27,11 @@ RemoteLoggerPool::RemoteLoggerPool(std::vectorqueueData(data); - d_pool_it++; - if (d_pool_it == d_pool.end()) { - d_pool_it = d_pool.begin(); + auto pool_it = d_pool_it.lock(); + auto result = (**pool_it)->queueData(data); + (*pool_it)++; + if (*pool_it == d_pool.end()) { + *pool_it = d_pool.begin(); } return result; } diff --git a/pdns/remote_logger_pool.hh b/pdns/remote_logger_pool.hh index fdfe2f4908..4d6af2b026 100644 --- a/pdns/remote_logger_pool.hh +++ b/pdns/remote_logger_pool.hh @@ -21,6 +21,7 @@ */ #pragma once #include "config.h" +#include "lock.hh" #include "remote_logger.hh" #include #include @@ -58,5 +59,5 @@ public: private: std::vector> d_pool; - std::vector>::iterator d_pool_it; + LockGuarded>::iterator> d_pool_it; };