[newlib-cygwin] Cygwin: remove outdated vfork doc

Corinna Vinschen corinna@sourceware.org
Fri Feb 1 12:38:00 GMT 2019


https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=c0b9f600f9ce6753545f4df7967cffe1bb867488

commit c0b9f600f9ce6753545f4df7967cffe1bb867488
Author: Corinna Vinschen <corinna@vinschen.de>
Date:   Fri Feb 1 13:36:27 2019 +0100

    Cygwin: remove outdated vfork doc
    
    Signed-off-by: Corinna Vinschen <corinna@vinschen.de>

Diff:
---
 winsup/cygwin/how-vfork-works.txt | 36 ------------------------------------
 1 file changed, 36 deletions(-)

diff --git a/winsup/cygwin/how-vfork-works.txt b/winsup/cygwin/how-vfork-works.txt
deleted file mode 100644
index 59fe5f5..0000000
--- a/winsup/cygwin/how-vfork-works.txt
+++ /dev/null
@@ -1,36 +0,0 @@
-(THIS DESCRIPTION IS OUT-OF-DATE)
-
-How does vfork work?
-
-When a program calls vfork, cygwin attempts to short circuit its
-normal, expensive fork mechanism.
-
-Vfork is mainly smoke and mirrors.  A call to vfork contines to execute
-in the current process but first it returns a pid of 0 so that process
-will execute code intended for the child in a UNIX system.  Before
-returning the zero, vfork makes a copy of the current fd table so that
-closing an fd in the "child" will not affect the "parent".
-
-Some of this info is stored in a per-thread structure but vfork is not
-really thread-safe since it also stores the fd "backup" table in the
-global fd table.
-
-The process continues to execute until it hits some type of exec call.
-The exec call is essentially translated into a spawn NO_WAIT call and
-the new process is started via this mechanism.  After execing, the
-"child" process no longer should exist, so the spawn code longjmps back
-to the original vfork call.  The previously opened fds are closed and
-the parent's fd table is restored.  vfork() then returns the pid of the
-just-spawned process.
-
-Meanwhile, the just-spawned child notices that it has been spawned as
-the result of a vfork and closes the extra file handles.
-
-This all relies on the fact that the child in a vfork call can affect
-just about everything in the parent except for the parent's fds.
-The assumption is that a vfork is always just used as a method for
-starting a program.
-
-The assumption is also that all of this is much faster than the
-slow method that cygwin uses to implement fork().
-



More information about the Cygwin-cvs mailing list