Bug in fork() while in a thread

Jason Curl jcurlnews@arcor.de
Sun Aug 15 20:56:00 GMT 2010

On 15/08/2010 20:53, Christopher Faylor wrote:
> On Sun, Aug 15, 2010 at 07:42:01PM +0200, Jason Curl wrote:
>> In particular, if I create a thread, then issue a fork(), data that
>> exists on the stack is corrupted after the fork() is in the child. Using
>> data on the heap doesn't show any issues (and is currently my
>> workaround, in case this is a bug).
> If I'm reading this correctly then "the stack" in this case is the stack
> associated with the main thread.  Cygwin only duplicates the stack in
> the executing thread.  In your example, env (or presumably env2) from
> the main thread is passed to another thread which then calls fork.  In
> that scenario, the forked process is going to see garbage in env since
> the array has never been initialized.
> It is theoretically possible to duplicate the stack of the main thread
> and other threads in the forked process but this isn't something that I,
> personally, would want to take on.  I'm the guy who wrote the code that
> duplicates the state of the stack when a thread forks.  It was done at
> the request of a customer and it was very tricky to get right.  This
> isn't an experience I'd willingly take on again since it would be a lot
> of work, would require testing on every Windows OS from NT4 on, and
> would potentially slow down an already slow down Cygwin's already slow
> fork() implementation.
> However, if this is something that you're willing to do, I'll happily
> review a patch to the cygwin1.dll.  You'd need to modify fork related
> code in dcrt0.cc.

Thanks Chris for the detailed reply. I've got a workaround and you've 
confirmed it is correct with your explanation. I don't get much time, my 
C++ needs improving, let's see what I can do.

> cgf

Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

More information about the Cygwin mailing list