From 9e955f4e5f1956245d8a4a147c6e4c194a07f1de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Dzi=C4=99giel?= Date: Fri, 21 Nov 2025 18:04:15 +0100 Subject: [PATCH] clapper: Prevent concurrent cache cleanups We do not want to create situations where multiple threads are running cache cleanup at once (since they all think last one was run long ago). This can be prevented with a combination of global mutex and a "trylock", so we can simply avoid both mutex locking and starting another cleanup. --- src/lib/clapper/gst/clapper-enhancer-director.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/lib/clapper/gst/clapper-enhancer-director.c b/src/lib/clapper/gst/clapper-enhancer-director.c index c8f3ac7d..1f71cd31 100644 --- a/src/lib/clapper/gst/clapper-enhancer-director.c +++ b/src/lib/clapper/gst/clapper-enhancer-director.c @@ -60,6 +60,8 @@ typedef struct GError **error; } ClapperEnhancerDirectorData; +static GMutex cleanup_lock; + static gpointer clapper_enhancer_director_extract_in_thread (ClapperEnhancerDirectorData *data) { @@ -356,6 +358,11 @@ _cache_cleanup_func (ClapperEnhancerDirector *self) const gchar *data; gint64 since_cleanup, epoch_now, epoch_last = 0; + if (!g_mutex_trylock (&cleanup_lock)) { + GST_LOG_OBJECT (self, "Cache cleanup is already running"); + return G_SOURCE_REMOVE; + } + date = g_date_time_new_now_utc (); epoch_now = g_date_time_to_unix (date); g_date_time_unref (date); @@ -418,6 +425,7 @@ _cache_cleanup_func (ClapperEnhancerDirector *self) CLAPPER_TIME_FORMAT " ago", CLAPPER_TIME_ARGS (since_cleanup)); } + g_mutex_unlock (&cleanup_lock); g_free (filename); return G_SOURCE_REMOVE;