From: Florin Coras Date: Sat, 7 Dec 2024 21:20:46 +0000 (-0500) Subject: vcl: improve handling of thread cancelation in vls X-Git-Tag: v25.06-rc0~106 X-Git-Url: https://gerrit.fd.io/r/gitweb?a=commitdiff_plain;h=refs%2Fchanges%2F75%2F41975%2F3;p=vpp.git vcl: improve handling of thread cancelation in vls Meant for multi-threaded applications that share a vls and vcl worker. Disable thread cancelation on thread new thread detection and add a new pthread cancelation point in vls_mt_mq_lock Type: improvement Change-Id: I21b16ee7c6a5ec31b8f6363325cc7ffa463c7b5c Signed-off-by: Florin Coras --- diff --git a/src/vcl/vcl_locked.c b/src/vcl/vcl_locked.c index bae1c0d86b3..f8a306c1ba1 100644 --- a/src/vcl/vcl_locked.c +++ b/src/vcl/vcl_locked.c @@ -301,11 +301,18 @@ vls_mt_add (void) } else vcl_set_worker_index (vlsl->vls_wrk_index); + + /* Only allow new pthread to be cancled in vls_mt_mq_lock */ + int old_state; + if (vlsl->vls_mt_n_threads >= 2) + pthread_setcancelstate (PTHREAD_CANCEL_DISABLE, &old_state); } static inline void vls_mt_mq_lock (void) { + /* Allow controlled cancelation of thread before grabbing mutex */ + pthread_testcancel (); pthread_mutex_lock (&vlsl->vls_mt_mq_mlock); }