From: Remi Gacogne Date: Fri, 30 Apr 2021 13:51:00 +0000 (+0200) Subject: dnsdist: Convert ConcurrentConnectionManager to LockGuarded X-Git-Tag: dnsdist-1.7.0-alpha1~62^2~18 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5b039645ffd91515ce36dd70c56ebe8ce4a52866;p=thirdparty%2Fpdns.git dnsdist: Convert ConcurrentConnectionManager to LockGuarded --- diff --git a/pdns/dnsdistdist/connection-management.hh b/pdns/dnsdistdist/connection-management.hh index 7dd4fd6b74..9796cb60ef 100644 --- a/pdns/dnsdistdist/connection-management.hh +++ b/pdns/dnsdistdist/connection-management.hh @@ -21,26 +21,26 @@ */ #pragma once -#include +#include "lock.hh" class ConcurrentConnectionManager { public: - ConcurrentConnectionManager(size_t max): d_maxConcurrentConnections(max) + ConcurrentConnectionManager(size_t max) { + setMaxConcurrentConnections(max); } void setMaxConcurrentConnections(size_t max) { - std::lock_guard lock(d_concurrentConnectionsLock); - d_maxConcurrentConnections = max; + d_data.lock()->d_maxConcurrentConnections = max; } bool registerConnection() { - std::lock_guard lock(d_concurrentConnectionsLock); - if (d_maxConcurrentConnections == 0 || d_currentConnectionsCount < d_maxConcurrentConnections) { - ++d_currentConnectionsCount; + auto data = d_data.lock(); + if (data->d_maxConcurrentConnections == 0 || data->d_currentConnectionsCount < data->d_maxConcurrentConnections) { + ++data->d_currentConnectionsCount; return true; } return false; @@ -48,12 +48,14 @@ public: void releaseConnection() { - std::lock_guard lock(d_concurrentConnectionsLock); - --d_currentConnectionsCount; + --(d_data.lock()->d_currentConnectionsCount); } private: - std::mutex d_concurrentConnectionsLock; - size_t d_maxConcurrentConnections{0}; - size_t d_currentConnectionsCount{0}; + struct Data { + size_t d_maxConcurrentConnections{0}; + size_t d_currentConnectionsCount{0}; + }; + + LockGuarded d_data; };