From ce95c6407ef6ab1a60a1b1e2cd62ef4ae2081174 Mon Sep 17 00:00:00 2001 From: Christopher Faylor Date: Wed, 1 Jun 2005 03:46:56 +0000 Subject: * child_info.h (child_info::cygheap_h): Delete. (child_info::dwProcessId): New field. * cygheap.cc (init_cheap): Delete. (dup_now): Ditto. (cygheap_setup_for_child): Ditto. (cygheap_setup_for_child_cleanup): Ditto. (cygheap_fixup_in_child): Simplify. Use new "child_copy" function to copy heap from parent. (_csbrk): Don't attempt allocation if within cygheap section. Fix so that more than one allocation will succeed. (cygheap_init): Reset possibly-nonzero region to zero. * cygheap.h (cygheap_setup_for_child): Delete declaration. (cygheap_setup_for_child_cleanup): Ditto. (cygheap_start): Define as an array. * cygwin.sc: Modernize. Remove unneeded sections. Define cygheap here. * dcrt0.cc (do_exit): Reflect argument change to close_all_files. * dtable.cc (dtable::vfork_parent_restore): Ditto. * dtable.h: Ditto. * fhandler.h: Ditto. * fork.cc (fork_copy): Call ReadProcessMemory if there is no thread (indicating that we're execing). (fork_child): Don't mess with hParent. (fork_parent): Remove hParent stuff. It happens earlier now. Remove call to cygheap_setup_for_child* stuff. (fork): Put child_info_stuff in grouped structure. Issue error if parent handle is not set. (child_copy): New function. * sigproc.cc (child_info::child_info): Put cygheap settings here. Set parent handle. (child_info::~child_info): Close parent handle if it exists. * spawn.cc (spawn_guts): Reorganize so that ciresrv is allocated at only the last minute so that cygheap changes are reflected. Delete cygheap_setup* calls. * syscalls.cc (close_all_files): Add an argument to flag when the fd entry should be released. * winsup.h (close_all_files): Add an argument to close_all_files declaration. Declare child_copy. --- winsup/cygwin/sigproc.cc | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'winsup/cygwin/sigproc.cc') diff --git a/winsup/cygwin/sigproc.cc b/winsup/cygwin/sigproc.cc index e12c18012..46ef79e39 100644 --- a/winsup/cygwin/sigproc.cc +++ b/winsup/cygwin/sigproc.cc @@ -737,12 +737,23 @@ child_info::child_info (unsigned in_cb, child_info_types chtype) if (chtype != PROC_SPAWN) subproc_ready = CreateEvent (&sec_all, FALSE, FALSE, NULL); sigproc_printf ("subproc_ready %p", subproc_ready); + cygheap = ::cygheap; + cygheap_max = ::cygheap_max; + dwProcessId = myself->dwProcessId; + /* Create an inheritable handle to pass to the child process. This will + allow the child to duplicate handles from the parent to itself. */ + parent = NULL; + if (!DuplicateHandle (hMainProc, hMainProc, hMainProc, &parent, 0, TRUE, + DUPLICATE_SAME_ACCESS)) + system_printf ("couldn't create handle to myself for child, %E"); } child_info::~child_info () { if (subproc_ready) CloseHandle (subproc_ready); + if (parent) + CloseHandle (parent); } child_info_fork::child_info_fork () : -- cgit v1.2.3