From 6881c7d862dbb1640acab57661a5cffed935a12a Mon Sep 17 00:00:00 2001 From: user Date: Sun, 15 Feb 2026 22:09:12 +0100 Subject: [PATCH] fix: register signal handlers before pool startup Move SIGTERM/SIGINT handler registration to the top of serve() so signals are never ignored during slow startup phases (cold start health tests, source fetching). Previously, signals sent before pool.start() returned had no handler, causing podman to escalate to SIGKILL after the stop timeout. Co-Authored-By: Claude Opus 4.6 --- src/s5p/server.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/s5p/server.py b/src/s5p/server.py index f2be5fd..42df0cc 100644 --- a/src/s5p/server.py +++ b/src/s5p/server.py @@ -214,6 +214,13 @@ async def _metrics_logger( async def serve(config: Config) -> None: """Start the SOCKS5 proxy server.""" + # register signal handlers early so SIGTERM is never ignored + loop = asyncio.get_running_loop() + stop = loop.create_future() + + for sig in (signal.SIGTERM, signal.SIGINT): + loop.add_signal_handler(sig, lambda s=sig: stop.set_result(s)) + metrics = Metrics() proxy_pool: ProxyPool | None = None @@ -252,12 +259,6 @@ async def serve(config: Config) -> None: ) logger.info(" retries: %d", config.retries) - loop = asyncio.get_running_loop() - stop = loop.create_future() - - for sig in (signal.SIGTERM, signal.SIGINT): - loop.add_signal_handler(sig, lambda s=sig: stop.set_result(s)) - # SIGHUP: hot-reload config (timeout, retries, log_level, pool settings) async def _reload() -> None: if not config.config_file: