www.delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2009/05/14/17:21:22

X-Recipient: archive-cygwin AT delorie DOT com
X-SWARE-Spam-Status: No, hits=-1.9 required=5.0 tests=AWL,BAYES_00,SARE_MSGID_LONG40,SPF_PASS
X-Spam-Check-By: sourceware.org
MIME-Version: 1.0
In-Reply-To: <4A0B7CB2.5050203@byu.net>
References: <gufoof$4ov$1 AT ger DOT gmane DOT org> <4A0B6BE4 DOT 1020905 AT cygwin DOT com> <gufqp0$8jv$1 AT ger DOT gmane DOT org> <4A0B751A DOT 30007 AT cygwin DOT com> <guftc9$de2$1 AT ger DOT gmane DOT org> <4A0B7CB2 DOT 5050203 AT byu DOT net>
Date: Thu, 14 May 2009 17:20:58 -0400
Message-ID: <17393e3e0905141420w19b8ef8fr4f58a0f5c7f49ee7@mail.gmail.com>
Subject: Re: Question of the necessity of rebaseall
From: Matt Wozniski <godlygeek AT gmail DOT com>
To: cygwin AT cygwin DOT com
X-IsSubscribed: yes
Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Id: <cygwin.cygwin.com>
List-Unsubscribe: <mailto:cygwin-unsubscribe-archive-cygwin=delorie DOT com AT cygwin DOT 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

On Wed, May 13, 2009 at 10:06 PM, Eric Blake wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> According to Lenik on 5/13/2009 7:49 PM:
>>> You have it backwards. Forking doesn't break the relocation. Relocation
>>> breaks forking. cygwin1.dll needs to have a very special memory layout =
to
>>> implement the fork semantics in Win32. If this memory layout is
>>> disrupted, fork breaks.
>>>
>> Could you explain in more detail? I can't find any document about this
>> special memory layout.
>
> Read the source. =C2=A0This link is a bit old, but still captures the ess=
ence:
> http://cygwin.com/cgi-bin/cvsweb.cgi/src/winsup/cygwin/how-cygheap-works.=
txt?rev=3D1.5&content-type=3Dtext/x-cvsweb-markup&cvsroot=3Dsrc
>
> Remember, the semantics of fork is that BOTH processes (the parent and
> child) must see the SAME memory, and that includes all shared libraries
> being mapped at the SAME location. =C2=A0But since Windows doesn't provid=
e a
> native fork, the child must remap everything that the parent had, and hope
> that it lands at the same place. =C2=A0Rebasing improves the chance that =
the
> child will remap, because there are fewer dlls to be remapped in an
> arbitrary order.

Is this a place where using vfork() instead of fork() helps (where
it's applicable, of course)?  If so, we might be able to reduce the
number of rebase failures in the future just by trying to push other
projects to use vfork wherever it's substitutable for fork...

~Matt

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

- Raw text -


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