Changes for version 0.000037 - 2026-05-16
- Fix peer-registration leak across all shared-state drivers when peer dies ungracefully (SIGKILL/segfault/OOM); reap stale dead-pid entries on registration, filter peers(), implement peer_left sweeps (Base::FS, Base::DBI, JSONFile, LocalMemory)
- Chain AtomicPipe::peer_left to Base::FS SUPER so on-disk FIFO + sidecar reap runs alongside Atomic::Pipe state cleanup
- Fix Test::test_watch_pids race: child writes ready-signal file via atomic rename and serializes errors into payload
- Fix Service::Handle await_response/await_all_responses hang when peer dies on suspend_supported drivers; _pending_peer_active also checks captured-pid liveness
- Add suspend deadlines: Client::suspend accepts expires_at/expires_in; Handle treats missed deadline as peer-gone across JSONFile, LocalMemory, Base::FS (.suspend sidecar), Base::DBI (new suspend_expires column)
- Run MariaDB/MySQL/PostgreSQL tests against every ~/dbs/<prefix>-* installation: new IPC::Manager::Test::DBVersions helper forks an AsyncSubtest per discovered version with $ENV{PATH} pointing at that version's bin dir; falls back to system PATH when ~/dbs is missing; skip_all when neither yields a viable driver
- Drop DBD::mysql dependency: IPC::Manager::Client::MySQL now requires DBD::MariaDB (DBIx::QuickDB::Driver::MySQL prefers it and emits dbi:MariaDB DSN when available). Lets MariaDB-only hosts run the MySQL client without an alternate-lib-location DBD::mysql build.
- ipcm_spawn(dbh => $dbh) and ipcm_connect($id, undef, dbh => $dbh): pass a pre-connected DBI handle instead of letting the protocol build its own. Protocol auto-detected from $dbh->{Driver}{Name} (Pg/MariaDB/mysql/SQLite); route reassembled from $dbh->{Name} so the spawn->info string remains usable by peers that connect via the DSN path. Useful for embedding the IPC bus inside an app that already owns a DBI connection without forcing it to bootstrap a separate one.
Modules
Decentralized local IPC through various protocols.
Base class for DBI based protocols
Base class for filesystem based protocols
Base class for filesystem clients that read via a handle
Base class for all client protocols
Use FIFO pipes for message transfers.
Connection-oriented UNIX socket IPC client.
Single JSON file as a message store
Process-local in-memory message store for testing only
Use MariaDB as a message store.
Use files on disk as a message store.
Use MySQL as a message store.
Use PostgreSQL as a message store.
Use SQLite as a message store.
Use UNIX sockets for message transfers.
Database based clients for IPC::Manager.
Messages sent between clients.
Per-connection management for connection-oriented clients
Non-blocking outbound queue for clients
Role for implementing IPC services with message handling
Role for handling request/response patterns in IPC services.
Role for I/O multiplexing in IPC services
Serializer base class for IPC::Manager.
JSON Serializer for IPC::Manager.
JSON serializer with zstd compression for IPC::Manager.
Base class for creating IPC services
Service that echoes back request content
Handle class for connecting to IPC services
Peer connection class for IPC::Manager services
Internal implementation of ipcm_service and ipcm_worker
Encapsulation of a newly initiated message store.
Reusable protocol-agnostic test suite for IPC::Manager
Utility functions for IPC::Manager