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.
This commit is contained in:
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user