bsd: signal masking

This commit is contained in:
ed 2026-06-12 23:37:12 +00:00
parent a48afe87b9
commit a00bc93fe1
2 changed files with 14 additions and 8 deletions

View file

@ -51,6 +51,7 @@ from .th_srv import (
) )
from .up2k import Up2k from .up2k import Up2k
from .util import ( from .util import (
BLOCK_SIGS,
DEF_EXP, DEF_EXP,
DEF_MTE, DEF_MTE,
DEF_MTH, DEF_MTH,
@ -1486,6 +1487,8 @@ class SvcHub(object):
for sig in sigs: for sig in sigs:
signal.signal(sig, self.signal_handler) signal.signal(sig, self.signal_handler)
if sig not in BLOCK_SIGS and BLOCK_SIGS:
BLOCK_SIGS.append(sig)
if self.args.sig_thr: if self.args.sig_thr:
Daemon(self._signal_thr, "svchub-sig") Daemon(self._signal_thr, "svchub-sig")

View file

@ -326,7 +326,14 @@ except:
BITNESS = struct.calcsize("P") * 8 BITNESS = struct.calcsize("P") * 8
CAN_SIGMASK = not (ANYWIN or PY2 or GRAAL) try:
if ANYWIN or PY2 or GRAAL or not hasattr(signal, "pthread_sigmask"):
raise Exception()
BLOCK_SIGS = [signal.SIGINT, signal.SIGTERM, signal.SIGHUP, signal.SIGUSR1]
CAN_SIGMASK = True
except:
BLOCK_SIGS = []
CAN_SIGMASK = False
RE_ANSI = re.compile("\033\\[[^mK]*[mK]") RE_ANSI = re.compile("\033\\[[^mK]*[mK]")
@ -832,10 +839,8 @@ class Daemon(threading.Thread):
self.start() self.start()
def run(self): def run(self):
if CAN_SIGMASK: if BLOCK_SIGS:
signal.pthread_sigmask( signal.pthread_sigmask(signal.SIG_BLOCK, BLOCK_SIGS)
signal.SIG_BLOCK, [signal.SIGINT, signal.SIGTERM, signal.SIGUSR1]
)
self.fun(*self.a, **self.ka) self.fun(*self.a, **self.ka)
@ -1778,9 +1783,7 @@ def log_thrs(log: Callable[[str, str, int], None], ival: float, name: str) -> No
def _sigblock(): def _sigblock():
signal.pthread_sigmask( signal.pthread_sigmask(signal.SIG_BLOCK, BLOCK_SIGS)
signal.SIG_BLOCK, [signal.SIGINT, signal.SIGTERM, signal.SIGUSR1]
)
sigblock = _sigblock if CAN_SIGMASK else noop sigblock = _sigblock if CAN_SIGMASK else noop