Linux: system () + manipulação SIGCHLD + multithreading

Eu tenho um aplicativo multithread que instala um manipulador para SIGCHLD que registra e colhe os processos filho.
O problema que vejo começa quando estou fazendo uma ligação parasystem(). system() precisa esperar que o processo filho termine e o consiga, pois ele precisa do código de saída. É por isso que chamasigprocmask() para bloquear SIGCHLD. Mas no meu aplicativo multithreaded, o SIGCHLD ainda é chamado em um thread diferente e a criança é obtida antessystem() tem a chance de fazer isso.

Este é um problema conhecido no POSIX?

Uma maneira de contornar isso é bloquear o SIGCHLD em todos os outros threads, mas isso não é realmente realista no meu caso, já que nem todos os threads são criados diretamente pelo meu código.
Quais outras opções eu tenho?

questionAnswers(4)

yourAnswerToTheQuestion