delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2014/01/17/17:12:21

X-Recipient: archive-cygwin AT delorie DOT com
DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id
:list-unsubscribe:list-subscribe:list-archive:list-post
:list-help:sender:message-id:date:from:mime-version:to:subject
:references:in-reply-to:content-type; q=dns; s=default; b=fr+XIm
JGwDqrU/XGRKKNfkMxUsXHXenKplamCk+F589mIrD96G20msvvXOS5+tpCRxo52R
qnJCpP/wNbauGINCuij47z6btDL3YB7zHZ3lky4VvlmYLEf0TPO86/FCJCoP7UJ0
Qm+ng4wq9LVFchK4kB4aic0YYen6xrP2yj3cc=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id
:list-unsubscribe:list-subscribe:list-archive:list-post
:list-help:sender:message-id:date:from:mime-version:to:subject
:references:in-reply-to:content-type; s=default; bh=EwTtn/QDkQda
S3udNkGgC5RfFjA=; b=wOKGRjLgViQO87CelA/+2M9s0rGS4SqZw3bCLLE4/tsW
RKa4r+cEkpu2o8VoI3rWJQMSauDYKchu1gOF9yekpKuHNgO/0FrU62XO5E9MISCQ
YHFHNspZl/WD6anqnHOPsN6BmMDa+CkTObcNPmetsusrlXehapJ1ukckq5aTLqg=
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
Authentication-Results: sourceware.org; auth=none
X-Virus-Found: No
X-Spam-SWARE-Status: No, score=-1.7 required=5.0 tests=AWL,BAYES_00,RP_MATCHES_RCVD,SPF_HELO_PASS,SPF_PASS autolearn=ham version=3.3.2
X-HELO: mx1.redhat.com
Message-ID: <52D9A589.2050102@redhat.com>
Date: Fri, 17 Jan 2014 14:50:01 -0700
From: Eric Blake <eblake AT redhat DOT com>
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.2.0
MIME-Version: 1.0
To: cygwin AT cygwin DOT com
Subject: Re: fork() + file descriptor bug in 1.7.27(0.271/5/3) 2013-12-09 11:54
References: <831845 DOT 98759 DOT bm AT smtp116 DOT sbc DOT mail DOT ne1 DOT yahoo DOT com> <52D55D96 DOT 8070407 AT redhat DOT com> <946338 DOT 89157 DOT bm AT smtp116 DOT sbc DOT mail DOT ne1 DOT yahoo DOT com> <52D98E1D DOT 8010907 AT redhat DOT com>
In-Reply-To: <52D98E1D.8010907@redhat.com>
OpenPGP: url=http://people.redhat.com/eblake/eblake.gpg
X-IsSubscribed: yes

--8bXaAKfI1ABQintksme6qLf80Gv76RQrl
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

On 01/17/2014 01:10 PM, Eric Blake wrote:
>> However..
>>
>> Do I understand that to say that if the first thing my child does is
>>
>> 	fclose(fp);
>>
>> everything should be hunky-dory?
>=20
> No.  You have to fix things _in the parent, before the fork()_ for
> everything to be hunky-dory.  The easiest way to do that is to
> fflush(NULL) before fork()ing.

The exception to needing to fflush() before forking is when the child
will call exec*() or _exit(), as those paths discard any partially-read
buffers without reflecting them back to the underlying fd, and thus
don't interfere with the parent's notion of where to continue reading
from the fd.

And as it is, all this discussion about fflush(NULL) before fork()
depends on the POSIX folks fixing this bug which I just filed:
http://austingroupbugs.net/view.php?id=3D816

without that fix in POSIX, you could argue that fflush(NULL) won't do
anything to input streams, and that you would have to explicitly call
fflush(stream) for every input stream, for cases where you know your
child is going to exit() rather than _exit() or exec*().

--=20
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org


--8bXaAKfI1ABQintksme6qLf80Gv76RQrl
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="signature.asc"

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
Comment: Public key at http://people.redhat.com/eblake/eblake.gpg
Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/

iQEcBAEBCAAGBQJS2aWJAAoJEKeha0olJ0Nq5PQH/3j7jxvQAWDuiC1DQq5fuW5o
eIOUtu+x4v8vndA0/QXVFuwIDkyKsapUbr+BxJVXBREJcwfbInh+W7C+znLidfUI
teyUPBC4k7OWkGm2TSxMN2Zl5Npp9KCtqouYUqjk3qzFcD81G0Q0StlVcsAtCl0u
AXYcA4yJAgvEw/JslUvojnep4g4Tx2rLY3CIKhFYS0aRQCFOQzHpZR20Cg/H4sfa
3dENnJ+tW+bAHktTdf345SFRWjV7UmvG2zSEJF7MORpXKlXfPBvrmXE1T32I7MCS
ao4X9vazw9zYn99yXjwr6C5wMwQ5gwx5u4tCbQWiSOCmQV3qctV9q5WI0gMPV9A=
=Mc25
-----END PGP SIGNATURE-----

--8bXaAKfI1ABQintksme6qLf80Gv76RQrl--

- Raw text -


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