From 1f063f704d15d277eeb92783892158c00533345a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Jaramago=20Fern=C3=A1ndez?= Date: Wed, 28 Sep 2022 18:24:17 +0200 Subject: [PATCH] Fix invalid memory accesses to digests due to concurrent purge --- lib/Query_Processor.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/Query_Processor.cpp b/lib/Query_Processor.cpp index 11f0c8f24..b5bb3d21b 100644 --- a/lib/Query_Processor.cpp +++ b/lib/Query_Processor.cpp @@ -1029,7 +1029,7 @@ unsigned long long Query_Processor::purge_query_digests(bool async_purge, bool p unsigned long long Query_Processor::purge_query_digests_async(char **msg) { unsigned long long ret = 0; - pthread_rwlock_rdlock(&digest_rwlock); + pthread_rwlock_wrlock(&digest_rwlock); unsigned long long curtime1=monotonic_time(); size_t map1_size = digest_umap.size(); size_t map2_size = digest_text_umap.size(); @@ -1077,7 +1077,7 @@ unsigned long long Query_Processor::purge_query_digests_async(char **msg) { unsigned long long Query_Processor::purge_query_digests_sync(bool parallel) { unsigned long long ret = 0; - pthread_rwlock_rdlock(&digest_rwlock); + pthread_rwlock_wrlock(&digest_rwlock); size_t map_size = digest_umap.size(); if (parallel && map_size >= DIGEST_STATS_FAST_MINSIZE) { // parallel purge int n=DIGEST_STATS_FAST_THREADS;