IPC-Manager
view release on metacpan or search on metacpan
- Loosen upper-bound timing assertion in t/unit/peer_active_timeout.t to <10s (was <3s, fired on loaded smokers)
- Loosen upper-bound timing assertion in t/unit/Util.t tinysleep test to <5s (was <1s, fired on loaded smokers)
0.000034 2026-04-26 03:43:44-07:00 America/Los_Angeles
- ConnectionUnix::_drain_reads early-returns EOF when $fh undef (global-destruction race destroying IO::Socket::UNIX before disconnect)
- Serializer::JSON::Zstd accepts level + dictionary constructor args; cinfo serializer slot accepts [$class, %args]; instances cached by class+args
- Base::FS::requeue_message / read_resume_file use 4-byte length-prefixed framing instead of newline (safe for binary serializers)
- Add Serializer::JSON::Zstd; chosen as default when Compress::Zstd 0.20+ installed, falls back to plain JSON otherwise (runtime recommendation, not hard dep)
- UnixSocket no longer appends trailing newline to serialized payloads (vestigial under SOCK_DGRAM, broke binary serializers)
- Handle::await_all_responses short-circuits gone-peer probe via new _have_gone_pending_peers helper
- Fix Handle::await_all_responses hang on peer crash; mirrors await_response semantics; accepts optional $timeout
- Bound Spawn::wait peer-disappear poll with deadline (default 60s, peer_timeout / $ENV{IPC_MANAGER_SPAWN_PEER_TIMEOUT})
- Test->run_all/run_one SIGTERM-then-SIGKILL subtest child pgroup on alarm timeout so service grandchildren get reaped; child becomes pgroup leader via POSIX::setpgid
- Add Client::ConnectionUnix, connection-oriented UNIX-socket driver on SOCK_STREAM with 4-byte length-prefixed framing and hello handshake; no EPIPE auto-reconnect
- Add Role::Client::Connection for uniform per-peer connection API (has_connection, connections, disconnect_connection, last_activity, close_idle_connections)
- Role::Service::Select supports dynamic select-handle sets via have_dynamic_handles_for_select; cache rebuilds IO::Select each iteration for those drivers
- Bump optional Atomic::Pipe dep from 0.022 to 0.026 in dist.ini, viable check, and test gates
- Add Role::Outbox: per-peer non-blocking send queue for FIFO/datagram clients; services flip send_blocking=0 at startup; per-peer order NOT preserved
- Client base sets _creator_pid once in init so DESTROY in forked child doesn't unlink parent FIFO/socket/route; default fallbacks for full Outbox API
- Client::AtomicPipe and Client::UnixSocket consume Role::Outbox; non-blocking when send_blocking=0, blocking otherwise
- Client::ConnectionUnix consumes Role::Outbox with per-connection send_buffer (SOCK_STREAM mid-frame partial writes can't restart); overrides pending_sends/drain_pending/have_writable_handles/writable_handles
- Service::Select adds select_write(); Service::watch uses IO::Select->select($r,$w,undef,$cycle) to wake on writability
0.000033 2026-04-25 01:47:50-07:00 America/Los_Angeles
- Reset Test->run_all alarm per subtest (180s each instead of single sweep budget); IPC_MANAGER_TEST_TIMEOUT env override; failure names timed-out subtest
- JSONFile NoInotify uses Time::HiRes::stat for nanosecond-resolution mtime; drop INTERVAL wait before SHA tiebreaker
- Speed up two slowest Test subtests: blocking waitpid replaces 50-iter pid_is_running poll (~12.9s -> <1s); drop arbitrary sleep fences from test_intercept_errors (~3.6s -> ~2.3s)
- Add Test->run_one(protocol, test); split t/<Protocol>.t into per-subtest files under t/<Protocol>/ for prove -j parallelism (whole-suite ~71s -> ~24s)
0.000032 2026-04-23 08:27:50-07:00 America/Los_Angeles
- Accidentally uploaded wrong 0.000031 tarball, re-releasing to fix
0.000031 2026-04-23 08:25:32-07:00 America/Los_Angeles
- Fix Handle::await_response race where peer that responded then exited got reported as "peer ... went away"; final non-blocking poll re-checks for response after peer-active probe reports gone
0.000030 2026-04-22 13:17:49-07:00 America/Los_Angeles
- Fix 0.000028 regression where UnixSocket route-length check croaked for short peer ids on long TMPDIR; check deferred to Base::FS::on_disk_name and only fires when hashed form doesn't fit
0.000029 2026-04-21 07:31:45-07:00 America/Los_Angeles
- Expose ipcm_service first-fork child pid via $handle->child_pid (supervisors can use standard spawn path with pre/post_fork_hook + ready handshake instead of rolling own fork helper)
0.000028 2026-04-20 13:48:46-07:00 America/Los_Angeles
- Support arbitrarily long peer names: DBI drivers widen ipcm_peers.id and ipcm_messages to/from from VARCHAR(36) to VARCHAR(512); FS drivers hash overlong/unsafe ids to "h-" + 40 hex sha256 with .name sidecar; UnixSocket sizes threshold to sun_p...
0.000027 2026-04-19 09:58:22-07:00 America/Los_Angeles
0.000026 2026-04-19 08:36:18-07:00 America/Los_Angeles
- Split Client::SharedMem into its own CPAN dist (IPC-Manager-Client-SharedMem); module, tests, SysV probe, Makefile.PL/dist.ini shims no longer ship here
0.000025 2026-04-19 06:33:45-07:00 America/Los_Angeles
- Add optional $timeout to Service::Peer::ready, Service::Handle::ready, Client::peer_active; polls via IO::Select on peer-change fd (inotify) or 0.05s sleep-retry, replacing 0.025s busy-wait in Service::State
0.000024 2026-04-18 14:57:47-07:00 America/Los_Angeles
- Fix sync_request hang when peer disappears mid-request: await_response snapshots peer at send time and croaks on full unregistration; suspend_supported protocols still wait across clean suspend / restart-under-new-pid
- Add optional $timeout to sync_request and await_response (croak on deadline; unchanged when omitted)
- Sweep orphaned Atomic::Pipe reassembly state via new Client peer_left() hook called from service loop on peer-delta removal
0.000023 2026-04-17 12:06:27-07:00 America/Los_Angeles
- Strengthen SysV IPC configure probe: concurrent-contention and rapid create/destroy phases catch hosts where semop sporadically returns EINVAL under load
- Add kernel-limit probe disabling SharedMem when /proc/sys/kernel/sem or shmmni/shmmax below workable minimums
- Add persistence probe disabling SharedMem when external reaper (systemd-logind RemoveIPC, ipcrm cron, cgroup IPC policy) destroys freshly-created semaphore mid-probe
- Detect systemd-logind RemoveIPC=yes without user linger and include as diagnostic hint in install failure message
0.000022 2026-04-16 16:49:45-07:00 America/Los_Angeles
- Reap children in the service loop via waitpid(-1, WNOHANG) so unrelated zombies are cleaned up
- Add run_on_pid hook and on_pid service callback for reaped non-worker child processes
- Add pids key to the watch() activity hash mapping reaped non-worker pid to exit value
0.000021 2026-04-16 07:18:10-07:00 America/Los_Angeles
- Fill in missing Changes entries for 0.000020
0.000020 2026-04-16 01:09:03-07:00 America/Los_Angeles
- Refactor Service::State to use Long::Jump instead of labelled redo
- Disable SharedMem at install time when host SysV IPC is broken
- Fix test_service_callbacks race waiting for on_peer_delta
- Fix test_workers race where parent reads empty pid file
0.000019 2026-04-13 15:01:40-07:00 America/Los_Angeles
- Add post_fork_hook to Role::Service and post_fork callback to Service for double-fork/daemonize support
0.000018 2026-04-12 02:20:35-07:00 America/Los_Angeles
- Fix UnixSocket reads on FreeBSD: use recv() instead of diamond operator for SOCK_DGRAM sockets
- Fix SharedMem semaphore EINVAL race: disconnect Handle client before Spawn destruction
- Fix message ordering on systems with coarse Time::HiRes resolution
- Add sort_messages to Client base class to centralize message sort logic
0.000017 2026-04-11 09:16:39-07:00 America/Los_Angeles
- Fix on_general_message test race where file was observed before content was written
0.000016 2026-04-10 09:25:35-07:00 America/Los_Angeles
- Fix Spawn shutdown race where fast services exit before wait() captures their PIDs
0.000015 2026-04-09 16:16:09-07:00 America/Los_Angeles
- Use Cpanel::JSON::XS directly and lazily reinitialize to survive global destruction
- Replace JSON::PP prereq with Cpanel::JSON::XS in dist.ini
- Fix Spawn::wait() to waitpid child processes before destroying shared resources
- Add debug flag to Spawn, reduce test suite noise
0.000014 2026-04-08 14:58:59-07:00 America/Los_Angeles
- Refactor viable() into base-class wrapper around _viable() so it never throws
( run in 0.930 second using v1.01-cache-2.11-cpan-600a1bdf6e4 )