From 2238faa9132154163fe55be992721412fa591e03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20M=C3=A4kel=C3=A4?= Date: Sun, 7 Jul 2019 21:20:28 +0300 Subject: [PATCH] Make response time lock server-specific There's no global data being modified inside the method call so a instance level lock is sufficient. --- server/core/server.cc | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/server/core/server.cc b/server/core/server.cc index 6b7ff6678..43fd5d4e4 100644 --- a/server/core/server.cc +++ b/server/core/server.cc @@ -1550,18 +1550,9 @@ bool server_set_disk_space_threshold(SERVER* server, const char* disk_space_thre return rv; } -namespace -{ -std::mutex ave_write_mutex; -} - void server_add_response_average(SERVER* srv, double ave, int num_samples) { - Server* server = static_cast(srv); - - - std::lock_guard guard(ave_write_mutex); - server->response_time_add(ave, num_samples); + static_cast(srv)->response_time_add(ave, num_samples); } int server_response_time_num_samples(const SERVER* srv) @@ -1589,9 +1580,11 @@ double server_response_time_average(const SERVER* srv) void Server::response_time_add(double ave, int num_samples) { constexpr double drift {1.1}; - int current_max = m_response_time.sample_max(); int new_max {0}; + std::lock_guard guard(m_lock); + int current_max = m_response_time.sample_max(); + // This server handles more samples than EMA max. // Increasing max allows all servers to be fairly compared. if (num_samples >= current_max)