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 <noreply@anthropic.com>
This commit is contained in:
user
2026-02-15 22:09:12 +01:00
parent 590126bcf8
commit 6881c7d862

View File

@@ -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: