From f0ea8c294dca2b7e70cc6d5e3f6a3f357481123a Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Thu, 13 Mar 2025 15:42:04 -0400 Subject: [PATCH] single system call for signal blocking --- src/core/worker_loop_.ml | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/src/core/worker_loop_.ml b/src/core/worker_loop_.ml index 6658ceec..25bf4713 100644 --- a/src/core/worker_loop_.ml +++ b/src/core/worker_loop_.ml @@ -103,19 +103,22 @@ let with_handler ~ops:_ self f = f () [@@@endif] let worker_loop (type st) ~block_signals ~(ops : st ops) (self : st) : unit = - if block_signals then - List.iter - (fun signal -> try Sys.set_signal signal Sys.Signal_ignore with _ -> ()) - [ - Sys.sigterm; - Sys.sigpipe; - Sys.sigint; - Sys.sigchld; - Sys.sigalrm; - Sys.sigusr1; - Sys.sigusr2; - Sys.sigvtalrm; - ]; + if block_signals then ( + try + ignore + (Unix.sigprocmask SIG_BLOCK + [ + Sys.sigterm; + Sys.sigpipe; + Sys.sigint; + Sys.sigchld; + Sys.sigalrm; + Sys.sigusr1; + Sys.sigusr2; + ] + : _ list) + with _ -> () + ); let cur_fiber : fiber ref = ref _dummy_fiber in let runner = ops.runner self in