Changes for version 0.000036 - 2026-05-10
- Add IPC::Manager::Role::Service::run_returns_to_caller, a default-false opt-in that lets a service ask _ipcm_service to return to its caller after run() returns instead of calling POSIX::_exit / exit. The hook is meaningful only when the service was launched via exec.stay_in_begin = 1, which invokes _ipcm_service synchronously inside the boot -M BEGIN hook of the exec'd perl process: returning out of _ipcm_service then propagates back through IPC::Manager::Service::State::import and out of BEGIN, while perl is still parsing the -e entry script. The combination -- exec.stay_in_begin = 1 on the launching side and run_returns_to_caller true on the consuming class -- is the supported pattern for "preload services that hand off to a forked, freshly-goto::file'd test grandchild" (e.g. the Test2-Harness preload service). Existing services that do not consume Role::Service, or that consume it without overriding the hook, still get the previous "always exit after run() returns" behaviour
- IPC::Manager::Service::State::_ipcm_service honours run_returns_to_caller by storing run()'s exit code in an outer lexical, letting the setjump body return normally, and propagating the value back to its caller. The setjump body is refactored so the exit() / POSIX::_exit() calls live outside its eval and only fire when the opt-in is not in effect; behaviour for CODE-ref services, services that never return from run(), and services that return with run_returns_to_caller false is unchanged. The module's POD gains an "EXEC AND STAY-IN-BEGIN MODE" section describing the supported pattern
- IPC::Manager::Service::State::ipcm_service now forwards the exec.stay_in_begin flag to the exec'd child instead of stripping it. The parent-side delete of $params{exec} happened before the JSON serialisation that is read by the child's import(), so the child always saw $params->{exec} as undef and the stay_in_begin branch was unreachable -- every exec-mode service that opted in to stay_in_begin silently degraded to the runtime-from-"-e" path, which prevents the goto::file + Long::Jump BEGIN-time handoff pattern from working at all. The fix re-serialises just { stay_in_begin => 0|1 } into the child's params so the child's import() sees the flag and can call _ipcm_service synchronously from inside BEGIN
- Add [PruneCruft] to dist.ini so build artifacts (blib/, pm_to_blib, MYMETA.*) no longer leak into release tarballs.
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