Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

In a multi-threaded fork process, child processes may be stuck by locks

Open
#430 3 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
35/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Stale
Tech stack
cpp

Research direction

Start with process v2 child creation and the notify_fork call stack described in the report, then inspect how boost::asio::detail::signal_state and its mutex are used across fork. Reproduce on Darwin with four concurrent creator threads and verify that child processes no longer remain blocked while preserving lock safety.

Written by the indexing model from the issue text.

Description

system: Darwin Kernel Version 22.5.0

boost version: 1.85.0

When I use the process v2 version of the library to create child processes to perform tasks, when multiple threads create processes at the same time, there is a high probability that one of the processes will get stuck.

This is my experimental results chart:
Here we start 4 threads, and then each thread uses process v2 to create a child process at the same time.
Image

In this figure, process 37673 is blocked.
Running lldb, you can see that the call stack of process 37673 is as shown in the following figure. You can see that the process is waiting for a lock. From frame 9, it can be seen that the sub-process is stuck in the notify_fork operation, and the operation inside is stuck while obtaining the lock.

Image

Here is the stuck position, I try to add it before this sentence.
I try to manually release the lock here first, and this problem can be solved. The code is as follows:

 boost::asio::detail::signal_state *state = boost::asio::detail::get_signal_state();
 state->mutex_.unlock();

Image

Dominant language
C++
Stars
145
Forks
151
PR merge metrics
No merged PRs in 30d

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from boostorg/process

All issues in boostorg/process

Similar issues

More C++ issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.