The changes can be verified by running test/lint/git-subtree-check.sh src/ipc/libmultiprocess as described in developer notes and lint instructions.
Changes since last subtree update (#34977):
- Adds
makePoolmethod onThreadMapto support thread pool routing, allowing requests without a specific client thread to be dispatched to a pool using a shortest-queue strategy (#283). - Adds
std::unordered_setsupport, aBuildListhelper, and aReadListhelper to reduce duplication in list build and read handlers (#277, #285). - Adds support for translating C++
std::optional<T>struct fields to pairs ofT+hasT :BoolCap'n Proto struct fields, allowing unset optional primitive fields to be represented (#243). - Produces more readable log output for Proxy object lifecycle events and IPC server-side failures (#218).
- Handles exceptions thrown by
destroymethods by logging instead of aborting (#273). This can prevent server crashes when non-libmultiprocess clients disconnect without destroying objects, in the case where a server object owns client objects and the server destructor tries to call the disconnected client to free them (#219). - Handles unexpected exceptions thrown by callbacks (that should never happen) by logging errors instead of deadlocking (#260).
- Fixes a rare mptest hang on musl builds caused by a lost wakeup bug in
Waiter(#295). - Fixes a race condition in a log print detected by TSan (#286).
- Build improvements: makes
target_capnp_sourceswork correctly when libmultiprocess is used as a CMake subproject (#289), addsmp_headerstarget for better lint tool support (#291), and fixes compatibility with recent Nix and CMake 4.0 (#238). - Test, CI, documentation, and minor code improvements: design document corrections (#278), field constant comments (#279), clang-tidy fix (#292), new smoke test for double-precision float values (#294), new test for recursive async IPC calls (#301), removal of libevent from Core CI builds (#299), and rename of
EventLoop::m_num_clientstom_num_refs(#302).