diff options
author | Christopher Faylor <me@cgf.cx> | 2002-07-13 20:00:27 +0000 |
---|---|---|
committer | Christopher Faylor <me@cgf.cx> | 2002-07-13 20:00:27 +0000 |
commit | 0301bfd0ac66697d974d3855cbf1ebb900c70932 (patch) | |
tree | 153f5289046109005f00672e57676990d2e26567 /winsup/cygwin/fork.cc | |
parent | 37f7c64b8b3863b5df9bb6ebcc74370ceb60d7c2 (diff) | |
download | cygnal-0301bfd0ac66697d974d3855cbf1ebb900c70932.tar.gz cygnal-0301bfd0ac66697d974d3855cbf1ebb900c70932.tar.bz2 cygnal-0301bfd0ac66697d974d3855cbf1ebb900c70932.zip |
* debug.h (handle_list): Move here from debug.cc. Add "inherit" flag
functionality.
* cygheap.cc (init_cheap): Move cygheap_max calculation to _csbrk.
(_csbrk): Reorganize to not assume first allocation is <= 1 page.
(cygheap_setup_for_child): Mark protected handle as inheritable.
* cygheap.h (cygheap_debug): New struct.
(init_cygheap): Add new structure when debugging.
* dcrt0.cc (dll_crt0_1): Remove call to debug_init. Close ppid_handle here, if
appropriate. Don't protect subproc_ready, since it is already protected in the
parent. Call memory_init prior to ProtectHandle to ensure that cygheap is set
up. Call debug_fixup_after_fork_exec when appropriate.
(_dll_crt0): Don't close ppid_handle here.
* debug.cc: Use cygheap debug structure rather than static elements throughout.
(add_handle): Don't issue a warning if attempt to protect handle in exactly the
same way from exactly the same place. Add pid info to warning output. Accept
additional argument controlling whether handle is to be inherited. Add pid to
stored information.
(debug_fixup_after_fork_exec): Renamed from debug_fixup_after_fork. Reorganize
to avoid erroneously skipping handles.
(mark_closed): Add pid info to warning output.
(setclexec): Rename from setclexec_pid.
* fhandler.cc (fhandler_base::get_default_fmode): Minor reorg.
(fhandler_base::fstat): Add debugging output.
(fhandler_base::set_inheritance): Call setclexec rather than setclexec_pid.
(fhandler_base::fork_fixup): Ditto.
* fhandler_console.cc (get_tty_stuff): Mark protected handle as inheritable.
* fhandler_tty.cc (fhandler_tty_slave::open): Ditto.
* tty.cc (tty::make_pipes): Ditto.
(tty::common_init): Ditto.
* fork.cc (fork_parent): Ditto.
(fork_child): Close protected handles with correct name. Remove
debug_fixup_after_fork call.
* fhandler_socket.cc (fhandler_socket::create_secret_event): Mark protected
handle as inheritable/non-inheritable, as appropriate.
* shared.cc (memory_init): Mark protected handle as inheritable. Call
debug_init here.
* sigproc.cc (wait_sig): Close protected handle with correct name.
* spawn.cc (spawn_guts): Rename spr to subproc_ready and mark it as
inheritable.
* exceptions.cc (debugger_command): Try to run dumper.exe, if found.
* syscalls.cc (fstat64): Don't follow symlinks for path_conv lookup since path
is already resolved.
Diffstat (limited to 'winsup/cygwin/fork.cc')
-rw-r--r-- | winsup/cygwin/fork.cc | 21 |
1 files changed, 5 insertions, 16 deletions
diff --git a/winsup/cygwin/fork.cc b/winsup/cygwin/fork.cc index e25bc478c..7486da098 100644 --- a/winsup/cygwin/fork.cc +++ b/winsup/cygwin/fork.cc @@ -275,9 +275,8 @@ fork_child (HANDLE& hParent, dll *&first_dll, bool& load_dlls) MALLOC_CHECK; cygheap->fdtab.fixup_after_fork (hParent); - ProtectHandle (hParent); + ProtectHandleINH (hParent); - debug_fixup_after_fork (); pinfo_fixup_after_fork (); signal_fixup_after_fork (); @@ -299,8 +298,8 @@ fork_child (HANDLE& hParent, dll *&first_dll, bool& load_dlls) } ForceCloseHandle (hParent); - (void) ForceCloseHandle (fork_info->subproc_ready); - (void) ForceCloseHandle (fork_info->forker_finished); + (void) ForceCloseHandle1 (fork_info->subproc_ready, subproc_ready); + (void) ForceCloseHandle1 (fork_info->forker_finished, forker_finished); if (fixup_shms_after_fork ()) api_fatal ("recreate_shm areas after fork failed"); @@ -359,16 +358,6 @@ fork_parent (HANDLE& hParent, dll *&first_dll, subproc_init (); -#ifdef DEBUGGING_NOTNEEDED - /* The ProtectHandle call allocates memory so we need to make sure - that enough is set aside here so that the sbrk pointer does not - move when ProtectHandle is called after the child is started. - Otherwise the sbrk pointers in the parent will not agree with - the child and when user_data is (regrettably) copied over, - the user_data->ptr field will not be accurate. */ - free (malloc (4096)); -#endif - int c_flags = GetPriorityClass (hMainProc) /*| CREATE_NEW_PROCESS_GROUP*/; STARTUPINFO si = {0, NULL, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL, NULL}; @@ -428,8 +417,8 @@ fork_parent (HANDLE& hParent, dll *&first_dll, return -1; } - ProtectHandle (subproc_ready); - ProtectHandle (forker_finished); + ProtectHandleINH (subproc_ready); + ProtectHandleINH (forker_finished); init_child_info (PROC_FORK, &ch, 1, subproc_ready); |