This is the mail archive of the cygwin@sourceware.cygnus.com mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: cygwin.dll src question: fork()


>> >At the time when cygwin_fork_helper1() returns isn't the
>> >child's state already a copy of the parent's state?
>> 
>> No, actually, it isn't.  The setjmp and longjmp are used to move the
>> current execution point into the appropriate point in the cygwin_fork_helper1
>> function to emulate a true UNIX fork().
>> 
>> What happens is that to emulate a fork, the parent process starts the
>[...]
>> extends the stack to hopefully insure that the stack is large enough to
>> duplicate the parent, and longjmps to the child portion of the
>> cygwin_fork_helper1 routine.  There it wakes up the parent and sleeps
>> itself.
>
>um..  this is a completely different setjmp/longjmp pair.
>The setjmp that is jumped to from crt0 is in the cygwin_fork_helper1()
>function.  The __fork() function has its own setjmp/longjmp
>pair that seems to add no extra functionality.  Perhaps some sort
>of legacy from fork implementations of past.

My sincere apologies.  I've committed the usual Usenet sin of answering
the question that wasn't asked.

On inspection of the __fork code, I understand your confusion and share
it.  I wonder if this is a holdover from a previous fork implementation
or if this assures stack synchronization in some arcane way.
--
http://www.bbc.com/	cgf@bbc.com			"Strange how unreal
VMS=>UNIX Solutions	Boston Business Computing	 the real can be."
-
For help on using this list (especially unsubscribing), send a message to
"gnu-win32-request@cygnus.com" with one line of text: "help".


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]