delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2010/08/21/04:55:20

X-Recipient: archive-cygwin AT delorie DOT com
X-SWARE-Spam-Status: No, hits=-0.1 required=5.0 tests=BAYES_00,FREEMAIL_FROM,SARE_SPEC_REPLICA_OBFU,SPF_HELO_PASS,T_RP_MATCHES_RCVD,T_TO_NO_BRKTS_FREEMAIL
X-Spam-Check-By: sourceware.org
To: cygwin AT cygwin DOT com
From: Jason Curl <j DOT m DOT curl AT gmx DOT de>
Subject: Re: Bug in fork() while in a thread
Date: Sat, 21 Aug 2010 08:50:53 +0000 (UTC)
Lines: 43
Message-ID: <loom.20100821T104342-286@post.gmane.org>
References: <i498t9$tot$1 AT dough DOT gmane DOT org> <20100815185353 DOT GA26993 AT ednor DOT casa DOT cgf DOT cx> <20100816090552 DOT GA11340 AT calimero DOT vinschen DOT de>
Mime-Version: 1.0
User-Agent: Loom/3.14 (http://gmane.org/)
X-IsSubscribed: yes
Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Id: <cygwin.cygwin.com>
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sourceware.org/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs>
Sender: cygwin-owner AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
Delivered-To: mailing list cygwin AT cygwin DOT com

Corinna Vinschen <corinna-cygwin <at> cygwin.com> writes:
> On Aug 15 14:53, Christopher Faylor wrote:
> > On Sun, Aug 15, 2010 at 07:42:01PM +0200, Jason Curl wrote:
> > >Is it allowed to issue the fork() system call while not in the main 
> > >thread? When I read the OpenGroup specifications I don't seem to find 
> > >anything against allowing this.
> > 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.
> I guess I'm missing something here.  Here's an excerpt from the SUSv4
> fork man page:
> 
>   The fork() function shall create a new process. The new process (child
>   process) shall be an exact copy of the calling process (parent process)
>   except as detailed below:
> 
>   [...]
> 
>   o A process shall be created with a single thread. If a
>     multi-threaded process calls fork(), the new process shall contain
>     a replica of the calling thread and its entire address space,
>     possibly including the states of mutexes and other resources.
>     [...]
> 
> Is the stack of another thread, which is not executed in the forked
> process anymore, a part of the calling's thread "entire address space"?

Open Group Posix.1c-2004 mentions only a "signal stack" doesn't need to be 
copied for XSI.

Linux & FreeBSD 7.0 work OK. QNX641 returns ENOSYS if it even sniffs a thread 
call. I haven't tested Solaris Sparc. 

Which standard is Cygwin "closest" to, that I can use as a reference when I 
trip up on similar problems? I have the hint the SuSv4 implementation of Posix.

Thanks for your wonderful support.
Jason.




--
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

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019