atproto relay in zig zlay.waow.tech
relay zig atproto

fix cross-Io heap corruption: GC loop and health checks were using Threaded pg.Pool from Evented fibers master

- move GC loop from io.concurrent() (Evented fiber) to std.Thread.spawn() with pool_io (Threaded) — dp.gc() takes Threaded mutex + queries pg.Pool, which dereferences NULL Thread.current() threadlocal when called from Evented context → heap corruption / SIGSEGV - replace direct pg.Pool "SELECT 1" health checks with atomic last_db_success timestamp — metrics server and API router both run on Evented, pg.Pool runs on Threaded — isDbHealthy() reads an atomic set by Threaded workers, safe from any Io context Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>


+35 -9
3 changed files