From: Tobias Brunner Date: Tue, 13 May 2025 14:47:13 +0000 (+0200) Subject: vici: Make threads handling requests get canceled explicitly X-Git-Tag: 6.0.2dr1~17^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f8e5e38b126f916e3d76e0950712479bfd405891;p=thirdparty%2Fstrongswan.git 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. --- 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; } }