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/spawn.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/spawn.cc')
-rw-r--r-- | winsup/cygwin/spawn.cc | 39 |
1 files changed, 13 insertions, 26 deletions
diff --git a/winsup/cygwin/spawn.cc b/winsup/cygwin/spawn.cc index 7dc193c48..112154056 100644 --- a/winsup/cygwin/spawn.cc +++ b/winsup/cygwin/spawn.cc @@ -754,7 +754,7 @@ skip_arg_parsing: if (mode == _P_OVERLAY) { res |= EXIT_REPARENTING; - if (!parent_alive) + if (!my_parent_is_alive ()) { nwait = 1; sigproc_terminate (); @@ -789,32 +789,19 @@ skip_arg_parsing: * EXIT_REPARENTING status. Wait() syscall in parent will then wait * for newly created child. */ - pinfo parent (myself->ppid); - if (!parent) - /* nothing */; - else + HANDLE oldh = myself->hProcess; + HANDLE h = myself->ppid_handle; + sigproc_printf ("parent handle %p", h); + int rc = DuplicateHandle (hMainProc, pi.hProcess, h, &myself->hProcess, + 0, FALSE, DUPLICATE_SAME_ACCESS); + sigproc_printf ("%d = DuplicateHandle, oldh %p, newh %p", + rc, oldh, myself->hProcess); + if (!rc && my_parent_is_alive ()) { - int rc = 0; - HANDLE oldh = myself->hProcess; - HANDLE h = myself->ppid_handle; - sigproc_printf ("parent handle %p, pid %d", h, parent->dwProcessId); - if (h == NULL && GetLastError () == ERROR_INVALID_PARAMETER) - rc = 0; - else if (h) - { - rc = DuplicateHandle (hMainProc, pi.hProcess, - h, &myself->hProcess, 0, FALSE, - DUPLICATE_SAME_ACCESS); - sigproc_printf ("%d = DuplicateHandle, oldh %p, newh %p", - rc, oldh, myself->hProcess); - } - if (!rc) - { - system_printf ("Reparent failed, parent handle %p, %E", h); - system_printf ("my dwProcessId %d, myself->dwProcessId %d", - GetCurrentProcessId(), myself->dwProcessId); - system_printf ("old hProcess %p, hProcess %p", oldh, myself->hProcess); - } + system_printf ("Reparent failed, parent handle %p, %E", h); + system_printf ("my dwProcessId %d, myself->dwProcessId %d", + GetCurrentProcessId(), myself->dwProcessId); + system_printf ("old hProcess %p, hProcess %p", oldh, myself->hProcess); } } |