Boost logo

Boost :

From: Angus Leeming (angus.leeming_at_[hidden])
Date: 2004-06-23 03:56:41


Gregory Colvin wrote:
>> namespace {
>>
>> std::map<pid_t, int> completed_children;
>>
>> int status;
>> sig_atomic_t pid;
>>
>> }
>>
>> extern "C"
>> void child_handler(int)
>> {
>> pid = wait(&status);
>> std::map<pid_t, int>::iterator it =
>> completed_children.find(pid);
>> if (it != completed_children.end())
>> it->second = status;
>> }
>>
>> I'm pretty sure that the above is safe code.
>
> It's unsafe because it's not reentrant.

Really? I thought that Posix guaranteed that a handler receiving only one
type of signal (SIGCHLD in this case) would not receive multiple
calls simultaneaously? Is this not true in the presence of threads?

> But why do you need to reap the zombie? I've implemented
> the java process control natives with no need for reaping.

Addressed elsewhere.

Angus


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk