* child_info.h (child_proc_info): Declare as base class.

(spawn_info): Declare as alias of child_proc_info to aid debugging.
(fork_info): Ditto.
* cygheap.cc (cygheap_fixup_in_child): Use child_proc_info global rather than
parameter.
* cygheap.h (cygheap_fixup_in_child): Reflect above change in declaration.
* dcrt0.cc (_dll_crt0): Move 'si' definition here.  Assign child_proc_info.
(dll_crt0_1): Accommodate cygheap_fixup_in_child and *_info changes.
* environ.cc (spenv::retrieve): Make regparm.
* environ.h (environ_init): Ditto.
(win_env::add_cache): Ditto.
(build_env): Ditto.
(getwinenv): Ditto.
* fork.cc (sync_with_parent): Use fork_info global.
(fork_child): Ditto.
This commit is contained in:
Christopher Faylor
2002-06-15 21:59:32 +00:00
parent 5ae611458b
commit 6ea3e429df
8 changed files with 71 additions and 46 deletions

View File

@ -110,18 +110,18 @@ cygheap_setup_for_child_cleanup (void *newcygheap, child_info *ci,
/* Called by fork or spawn to reallocate cygwin heap */
void __stdcall
cygheap_fixup_in_child (child_info *ci, bool execed)
cygheap_fixup_in_child (bool execed)
{
cygheap = ci->cygheap;
cygheap_max = ci->cygheap_max;
cygheap = child_proc_info->cygheap;
cygheap_max = child_proc_info->cygheap_max;
void *addr = !wincap.map_view_of_file_ex_sucks () ? cygheap : NULL;
void *newaddr;
newaddr = MapViewOfFileEx (ci->cygheap_h, MVMAP_OPTIONS, 0, 0, 0, addr);
newaddr = MapViewOfFileEx (child_proc_info->cygheap_h, MVMAP_OPTIONS, 0, 0, 0, addr);
if (newaddr != cygheap)
{
if (!newaddr)
newaddr = MapViewOfFileEx (ci->cygheap_h, MVMAP_OPTIONS, 0, 0, 0, NULL);
newaddr = MapViewOfFileEx (child_proc_info->cygheap_h, MVMAP_OPTIONS, 0, 0, 0, NULL);
DWORD n = (DWORD) cygheap_max - (DWORD) cygheap;
/* Reserve cygwin heap in same spot as parent */
if (!VirtualAlloc (cygheap, CYGHEAPSIZE, MEM_RESERVE, PAGE_NOACCESS))
@ -144,7 +144,7 @@ cygheap_fixup_in_child (child_info *ci, bool execed)
UnmapViewOfFile (newaddr);
}
ForceCloseHandle1 (ci->cygheap_h, passed_cygheap_h);
ForceCloseHandle1 (child_proc_info->cygheap_h, passed_cygheap_h);
cygheap_init ();