diff options
author | Christopher Faylor <me@cgf.cx> | 2000-11-06 09:36:32 +0300 |
---|---|---|
committer | Christopher Faylor <me@cgf.cx> | 2000-11-06 09:36:32 +0300 |
commit | dd11f11faee36b8999cd6a7d56318e3be289f897 (patch) | |
tree | a922d160ecb185296abe958a65beff004280e47b /winsup/cygwin/fork.cc | |
parent | e0997f5a0f47ef8af016a6358ebfadbb161c8c56 (diff) |
* child_info.h (child_info): Add pppid_handle for closing the parent's of the
parent handle.
* dcrt0.cc (_dll_crt0): Close parent's parent handle when spawned or forked.
* debug.cc (add_handle): Correct erroneous reference to handle structure when
printing warning.
* exceptions.cc (interrupt_now): Always return 1.
(interrupt_on_return): Accept a sigthread argument. Check to see if this
argument has been trashed prior to setting up the stack return.
(call_handler): Add a loop around attempts to dispatch signals to detect case
where interrupt_on_return fails.
(_sigdelayed): Set up a temporary frame pointer prior to calling stuff that
could trigger an interrupt or the stack walking code will be very confused.
* fork.cc (fork_parent): Move a lot of the setup of the child process into
proc_subproc.
* spawn.cc (spawn_guts): Ditto. Use ppid_handle to contact logical parent when
reparenting.
* pinfo.h (_pinfo): Remember the logical handle of the parent process.
* sigproc.cc (proc_subproc): Record most stuff necessary for the _pinfo
structure that is inferrable from myself when adding children.
(wait_sig): Always set 'pending_signals' flag when about to kick off the signal
scanning loop. Reset it only if there are no pending signals.
Diffstat (limited to 'winsup/cygwin/fork.cc')
-rw-r--r-- | winsup/cygwin/fork.cc | 27 |
1 files changed, 1 insertions, 26 deletions
diff --git a/winsup/cygwin/fork.cc b/winsup/cygwin/fork.cc index 87315a4c2..c5536e2b7 100644 --- a/winsup/cygwin/fork.cc +++ b/winsup/cygwin/fork.cc @@ -471,35 +471,12 @@ fork_parent (void *stack_here, HANDLE& hParent, dll *&first_dll, bool& load_dlls system_printf ("couldn't create last_fork_proc, %E"); /* Fill in fields in the child's process table entry. */ - forked->ppid = myself->pid; forked->hProcess = pi.hProcess; forked->dwProcessId = pi.dwProcessId; - forked->uid = myself->uid; - forked->gid = myself->gid; - forked->pgid = myself->pgid; - forked->sid = myself->sid; - forked->ctty = myself->ctty; - forked->umask = myself->umask; forked->copysigs(myself); - forked->process_state |= PID_INITIALIZING | - (myself->process_state & PID_USETTY); memcpy (forked->username, myself->username, MAX_USER_NAME); - if (myself->use_psid) - { - memcpy (forked->psid, myself->psid, MAX_SID_LEN); - forked->use_psid = 1; - } - memcpy (forked->logsrv, myself->logsrv, MAX_HOST_NAME); - memcpy (forked->domain, myself->domain, MAX_COMPUTERNAME_LENGTH+1); - forked->token = myself->token; - forked->impersonated = myself->impersonated; - forked->orig_uid = myself->orig_uid; - forked->orig_gid = myself->orig_gid; - forked->real_uid = myself->real_uid; - forked->real_gid = myself->real_gid; - strcpy (forked->root, myself->root); - forked->rootlen = myself->rootlen; set_child_mmap_ptr (forked); + forked.remember (); /* Wait for subproc to initialize itself. */ if (!sync_with_child(pi, subproc_ready, TRUE, "waiting for longjmp")) @@ -536,8 +513,6 @@ fork_parent (void *stack_here, HANDLE& hParent, dll *&first_dll, bool& load_dlls goto cleanup; } - forked.remember (); - /* Start thread, and wait for it to reload dlls. */ if (!resume_child (pi, forker_finished) || !sync_with_child (pi, subproc_ready, load_dlls, "child loading dlls")) |