commit 4ebb7dc: [Fix] Fix http maps shared memory cache cleanup

Vsevolod Stakhov vsevolod at highsecure.ru
Sat Feb 12 13:07:06 UTC 2022


Author: Vsevolod Stakhov
Date: 2022-02-12 13:03:15 +0000
URL: https://github.com/rspamd/rspamd/commit/4ebb7dcf7fce6459c6d60813d136074c75700240 (HEAD -> master)

[Fix] Fix http maps shared memory cache cleanup
It must be initiated by active http worker as it really has the shm object
available.

---
 src/libserver/maps/map.c | 31 ++++++++++++++++++-------------
 1 file changed, 18 insertions(+), 13 deletions(-)

diff --git a/src/libserver/maps/map.c b/src/libserver/maps/map.c
index 6348ca8b2..19c6c6e6c 100644
--- a/src/libserver/maps/map.c
+++ b/src/libserver/maps/map.c
@@ -2521,20 +2521,25 @@ rspamd_map_backend_dtor (struct rspamd_map_backend *bk)
 				rspamd_fstring_free (data->etag);
 			}
 
-			if (g_atomic_int_compare_and_exchange (&data->cache->available, 1, 0)) {
-				if (data->cur_cache_cbd) {
-					msg_info ("clear shared memory cache for a map in %s on backend %s closing",
-							data->cur_cache_cbd->shm->shm_name,
-							bk->uri);
-					MAP_RELEASE (data->cur_cache_cbd->shm,
-							"rspamd_http_map_cached_cbdata");
-					ev_timer_stop (data->cur_cache_cbd->event_loop,
-							&data->cur_cache_cbd->timeout);
-					g_free (data->cur_cache_cbd);
-					data->cur_cache_cbd = NULL;
+			/*
+			 * Clear cached file, but check if a worker is an active http worker
+			 * as cur_cache_cbd is meaningful merely for active worker, who actually
+			 * owns the cache
+			 */
+			if (bk->map && bk->map->active_http) {
+				if (g_atomic_int_compare_and_exchange (&data->cache->available, 1, 0)) {
+					if (data->cur_cache_cbd) {
+						msg_info ("clear shared memory cache for a map in %s as backend \"%s\" is closing",
+								data->cur_cache_cbd->shm->shm_name,
+								bk->uri);
+						MAP_RELEASE (data->cur_cache_cbd->shm,
+								"rspamd_http_map_cached_cbdata");
+						ev_timer_stop (data->cur_cache_cbd->event_loop,
+								&data->cur_cache_cbd->timeout);
+						g_free (data->cur_cache_cbd);
+						data->cur_cache_cbd = NULL;
+					}
 				}
-
-				unlink (data->cache->shmem_name);
 			}
 
 			g_free (bk->data.hd);


More information about the Commits mailing list