From: Ensar Sarajčić Date: Fri, 7 Feb 2025 11:33:29 +0000 (+0100) Subject: Replace locks in `remote_logger_pool` with an atomic counter X-Git-Tag: dnsdist-2.0.0-alpha1~111^2~11 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6692e56a21074318958d67b13a4b55bab122e6d2;p=thirdparty%2Fpdns.git Replace locks in `remote_logger_pool` with an atomic counter --- diff --git a/pdns/remote_logger_pool.cc b/pdns/remote_logger_pool.cc index 8e1c268541..6b59bbaddc 100644 --- a/pdns/remote_logger_pool.cc +++ b/pdns/remote_logger_pool.cc @@ -8,7 +8,7 @@ #include "remote_logger_pool.hh" RemoteLoggerPool::RemoteLoggerPool(std::vector>&& pool) : - d_pool(std::move(pool)), d_pool_it(d_pool.begin()) + d_pool(std::move(pool)), d_counter(0) { } @@ -27,14 +27,6 @@ RemoteLoggerPool::RemoteLoggerPool(std::vector logger; - { - auto pool_it = d_pool_it.lock(); - logger = **pool_it; - (*pool_it)++; - if (*pool_it == d_pool.end()) { - *pool_it = d_pool.begin(); - } - } + std::shared_ptr logger = d_pool.at(d_counter++ % d_pool.size()); return logger->queueData(data); } diff --git a/pdns/remote_logger_pool.hh b/pdns/remote_logger_pool.hh index 4d6af2b026..0a203305a2 100644 --- a/pdns/remote_logger_pool.hh +++ b/pdns/remote_logger_pool.hh @@ -21,14 +21,16 @@ */ #pragma once #include "config.h" -#include "lock.hh" #include "remote_logger.hh" +#include +#include #include #include class RemoteLoggerPool : public RemoteLoggerInterface { public: + // this expects a non-empty vector RemoteLoggerPool(std::vector>&& pool); RemoteLoggerPool(const RemoteLoggerPool&) = delete; RemoteLoggerPool(RemoteLoggerPool&&) = delete; @@ -59,5 +61,5 @@ public: private: std::vector> d_pool; - LockGuarded>::iterator> d_pool_it; + std::atomic d_counter; };