Changes for version 0.12 - 2026-08-06
- io_uring: cancelling a timer could corrupt the heap. ur_del_timer freed the ur_timer immediately, but the timeout is already in flight in the kernel and its user_data IS that pointer, so the completion still arrived, was dereferenced, and freed a second time.
- Workers report their own pid again on perl below 5.14. $$ is a plain SV that perl only refreshes inside pp_fork, and hm_spawn forks from C, so every worker in the pool kept reporting the supervisor's pid - and POSIX::getpid is `sub getpid { $$ }`, so that read wrong too.
- t/15-process.t asserts the invariant directly: no worker may answer with the supervisor's pid.
- t/22-abi.t asserted _abi_ptr returns a positive IV. It returns a raw pointer, and Solaris x86-64 maps shared objects high enough to set the sign bit, so the assertion was wrong rather than the table.
Modules
an event-loop PSGI server
epoll readiness backend for Hyperman::Loop
io_uring backend for Hyperman::Loop
kqueue readiness backend for Hyperman::Loop
portable poll(2) backend for Hyperman::Loop
a fast, native, Future-compatible async result
the per-worker event loop
Plack/PSGI adapter for the Hyperman server