diff options
author | Christopher Faylor <me@cgf.cx> | 2000-11-15 06:27:48 +0000 |
---|---|---|
committer | Christopher Faylor <me@cgf.cx> | 2000-11-15 06:27:48 +0000 |
commit | 84aeff4126777c437a15c052f08be026f384ab70 (patch) | |
tree | 0d8fdcaf5f04948137e352b0f8b1e31e78925122 /winsup/cygwin/sigproc.cc | |
parent | fb0a87573362f64e9c26036f8c887c930fa9ca6a (diff) | |
download | cygnal-84aeff4126777c437a15c052f08be026f384ab70.tar.gz cygnal-84aeff4126777c437a15c052f08be026f384ab70.tar.bz2 cygnal-84aeff4126777c437a15c052f08be026f384ab70.zip |
Throughout use myself->ppid_handle rather than parent_alive.
* child_info.h (child_info): Eliminate parent_alive.
* dcrt0.cc (dll_crt0_1): Call fork_init for debugging pid creation.
* fork.cc (fork_child): Reflect change to fixup_mmaps_after_fork arguments.
(slow_pid_reuse): New function to grab last 'n' pids to prevent pid reuse.
(fork_parent): Move last_fork_proc into slow_pid_reuse. Handle fork_pids
debugging. Eliminate unnecessary call to set_child_mmap_ptr.
(fork_init): New debugging function.
* mmap.cc (fixup_mmaps_after_fork): Renamed from recreate_mmaps_after_fork.
Rely on copied data after a fork.
(set_child_mmap_ptr): Eliminate.
* pinfo.h (_pinfo): Eliminate parent_alive, mmap_ptr and reflect above changes.
* spawn.cc (spawn_guts): Eliminate vestiges of "old way" of sending new hProc
to parent process.
Diffstat (limited to 'winsup/cygwin/sigproc.cc')
-rw-r--r-- | winsup/cygwin/sigproc.cc | 18 |
1 files changed, 7 insertions, 11 deletions
diff --git a/winsup/cygwin/sigproc.cc b/winsup/cygwin/sigproc.cc index 472b101e8..67a5c16cf 100644 --- a/winsup/cygwin/sigproc.cc +++ b/winsup/cygwin/sigproc.cc @@ -128,14 +128,14 @@ BOOL __stdcall my_parent_is_alive () { DWORD res; - if (!parent_alive) + if (!myself->ppid_handle) { - debug_printf ("No parent_alive mutex"); + debug_printf ("No myself->ppid_handle"); res = FALSE; } else for (int i = 0; i < 2; i++) - switch (res = WaitForSingleObject (parent_alive, 0)) + switch (res = WaitForSingleObject (myself->ppid_handle, 0)) { case WAIT_OBJECT_0: debug_printf ("parent dead."); @@ -149,8 +149,8 @@ my_parent_is_alive () DWORD werr = GetLastError (); if (werr == ERROR_INVALID_HANDLE && i == 0) continue; - system_printf ("WFSO for parent_alive(%p) failed, error %d", - parent_alive, werr); + system_printf ("WFSO for myself->ppid_handle(%p) failed, error %d", + myself->ppid_handle, werr); res = FALSE; goto out; } @@ -304,6 +304,8 @@ proc_subproc (DWORD what, DWORD val) hchildren[val] = hchildren[nchildren]; pchildren[val] = pchildren[nchildren]; } + /* Don't scan the wait queue yet. Caller will send SIGCHLD to this process. + This will cause an eventual scan of waiters. */ break; /* A child is in the stopped state. Scan wait() queue to see if anyone @@ -816,7 +818,6 @@ subproc_init (void) void __stdcall init_child_info (DWORD chtype, child_info *ch, pid_t pid, HANDLE subproc_ready) { - subproc_init (); memset (ch, 0, sizeof *ch); ch->cb = sizeof *ch; ch->type = chtype; @@ -825,11 +826,6 @@ init_child_info (DWORD chtype, child_info *ch, pid_t pid, HANDLE subproc_ready) ch->console_h = console_shared_h; ch->subproc_ready = subproc_ready; ch->pppid_handle = myself->ppid_handle; - if (chtype != PROC_EXEC || !parent_alive) - ch->parent_alive = hwait_subproc; - else - DuplicateHandle (hMainProc, parent_alive, hMainProc, &ch->parent_alive, - 0, 1, DUPLICATE_SAME_ACCESS); } /* Check the state of all of our children to see if any are stopped or |