Revision history for Hyperman
0.02 2026-08-01
- io_uring backend: assign sqe->user_data directly instead of calling
io_uring_sqe_set_data64(), which only exists in liburing >= 2.2 and
left the .so with an undefined symbol on hosts with older liburing.
- Supervisor: close a signal lost-wakeup race. The pool loop now keeps
TERM/INT/HUP/USR1/USR2/CHLD blocked, reaps with WNOHANG, and waits
via sigsuspend(), so a USR1 stats dump (or any signal) arriving while
the pool is idle is serviced immediately instead of stalling until a
worker happened to exit. Fixes intermittent t/15-process.t failures.
0.01 2026-07-31
First release.
- Event-loop PSGI server: prefork supervisor + per-worker XS loop.
Passes the full Plack::Test::Suite; runs any Plack app via
`plackup -s Hyperman`.
- Pluggable readiness backends behind one C vtable: kqueue
(macOS/BSD), epoll (Linux), portable poll fallback, and an opt-in
io_uring backend (raw syscalls, poll-mode ring). Selection is
automatic; force with HYPERMAN_BACKEND.
- Hyperman::Future: native XS array-slot Future-compatible async
result. Handlers may return a Future (or any on_ready-compatible
object, e.g. CPAN Future) of the PSGI response; get/await pump the
worker's own loop re-entrantly.
- Async PSGI: psgi.streaming/delayed responder with a streaming
writer, psgix.io (dup'd client socket), psgix.loop, cancellation
of the response Future on client disconnect, timer and io_ready
Futures on the loop.
- Production: worker respawn with crash-loop throttle, SIGHUP
zero-downtime worker recycle, graceful TERM/INT drain, idle and
slow-request timeouts, pipelining fairness cap, request size
ceiling with 413, opt-in SO_REUSEPORT per-worker listeners
(Linux), access_log callback, Hyperman->stats.