Skip to content

multiprocess: Lock CapnpProtocol::m_loop with mutex

Placeholder Ryan Ofsky requested to merge github/fork/ryanofsky/pr/macrace into master

This change is intended to fix intermittent failures in ipc_tests unit test and rpc_misc.py functional tests that happen on mac os, which sometimes fail with error terminating due to uncaught exception of type std::__1::system_error: mutex lock failed: Invalid argument as reported https://github.com/chaincodelabs/libmultiprocess/issues/154

This error could happen when m_loop.reset(); in CapnpProtocol::startLoop executes before the m_loop->removeClient(lock); method returns in the ~CapnpProtocol destructor , causing an failure to reacquire the EventLoop::m_mutex inside the EventLoop::removeClient method, and the "mutex lock failed" exception to be thrown.

Fix this error by adding a new mutex to guard the CapnpProtocol::m_loop variable and making sure m_loop.reset(); cannot be called until after m_loop->removeClient(lock); returns.


This PR is part of the process separation project.

Merge request reports

Loading