From f8e5e38b126f916e3d76e0950712479bfd405891 Mon Sep 17 00:00:00 2001 From: Tobias Brunner Date: Tue, 13 May 2025 16:47:13 +0200 Subject: [PATCH] vici: Make threads handling requests get canceled explicitly Threads initiating SAs can get stuck on the semaphore in wait_for_listener() during shutdown if the corresponding job is never executed. A particular case when this can happen is if more initiations are triggered than worker threads are available. This causes a (known) deadlock as no workers are free anymore to process jobs (for inbound messages or timeouts etc.), including the one to initiate an SA. This change at least allows a proper shutdown. --- src/libcharon/plugins/vici/vici_socket.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libcharon/plugins/vici/vici_socket.c b/src/libcharon/plugins/vici/vici_socket.c index 156f0c89dc..1016633ab6 100644 --- a/src/libcharon/plugins/vici/vici_socket.c +++ b/src/libcharon/plugins/vici/vici_socket.c @@ -563,8 +563,8 @@ CALLBACK(on_read, bool, .id = entry->id, ); lib->processor->queue_job(lib->processor, - (job_t*)callback_job_create(process_queue, - sel, free, NULL)); + (job_t*)callback_job_create(process_queue, sel, + free, callback_job_cancel_thread)); entry->has_processor = TRUE; } } -- 2.47.2