mirror of
git://sourceware.org/git/newlib-cygwin.git
synced 2025-02-01 03:50:28 +08:00
* cygheap.cc (init_cheap): Just use any old address for the cygwin heap.
* exceptions.cc (signal_exit): Don't terminate the main thread. Just try to exit in this thread really quickly. * signal.cc (kill_pgrp): Fix typo which caused pinfo structure to be assigned incorrectly.
This commit is contained in:
parent
10e1fce6a1
commit
9149d76e50
@ -1,3 +1,12 @@
|
||||
Sun Sep 10 20:23:35 2000 Christopher Faylor <cgf@cygnus.com>
|
||||
|
||||
* cygheap.cc (init_cheap): Just use any old address for the cygwin
|
||||
heap.
|
||||
* exceptions.cc (signal_exit): Don't terminate the main thread. Just
|
||||
try to exit in this thread really quickly.
|
||||
* signal.cc (kill_pgrp): Fix typo which caused pinfo structure to be
|
||||
assigned incorrectly.
|
||||
|
||||
Sun Sep 10 12:40:49 2000 Christopher Faylor <cgf@cygnus.com>
|
||||
|
||||
* dcrt0.cc (dll_crt0_1): Initialize thread and debug stuff before
|
||||
|
@ -16,13 +16,13 @@
|
||||
#include "heap.h"
|
||||
#include "cygerrno.h"
|
||||
|
||||
#define HEAP_START ((void *) 0x12010000)
|
||||
inline static void
|
||||
init_cheap ()
|
||||
{
|
||||
if (!VirtualAlloc (HEAP_START, CYGHEAPSIZE, MEM_RESERVE, PAGE_NOACCESS))
|
||||
api_fatal ("Couldn't reserve space for child's heap, %E");
|
||||
cygheap = cygheap_max = HEAP_START;
|
||||
cygheap = VirtualAlloc (NULL, CYGHEAPSIZE, MEM_RESERVE, PAGE_NOACCESS);
|
||||
if (!cygheap)
|
||||
api_fatal ("Couldn't reserve space for cygwin's heap, %E");
|
||||
cygheap_max = cygheap;
|
||||
}
|
||||
|
||||
#define pagetrunc(x) ((void *) (((DWORD) (x)) & ~(4096 - 1)))
|
||||
@ -155,7 +155,7 @@ cygheap_fixup_in_child (HANDLE parent)
|
||||
DWORD m, n;
|
||||
n = (DWORD) cygheap_max - (DWORD) cygheap;
|
||||
if (!VirtualAlloc (cygheap, CYGHEAPSIZE, MEM_RESERVE, PAGE_NOACCESS))
|
||||
api_fatal ("Couldn't reserve space for child's heap, %E");
|
||||
api_fatal ("Couldn't reserve space for cygwin's heap in child, %E");
|
||||
|
||||
if (!VirtualAlloc (cygheap, n, MEM_COMMIT, PAGE_READWRITE))
|
||||
api_fatal ("Couldn't allocate space for child's heap %p, size %d, %E",
|
||||
|
@ -992,11 +992,6 @@ exit_sig:
|
||||
sig |= 0x80;
|
||||
}
|
||||
sigproc_printf ("signal %d, about to call do_exit", sig);
|
||||
TerminateThread (hMainThread, 0);
|
||||
/* FIXME: This just works around the problem so that we don't attempt to
|
||||
use a resource lock when exiting. */
|
||||
user_data->resourcelocks->Delete ();
|
||||
user_data->resourcelocks->Init ();
|
||||
signal_exit (sig);
|
||||
/* Never returns */
|
||||
}
|
||||
@ -1007,15 +1002,6 @@ exit_sig:
|
||||
static void
|
||||
signal_exit (int rc)
|
||||
{
|
||||
/* If the exception handler gets a trap, we could recurse awhile.
|
||||
If this is non-zero, skip the cleaning up and exit NOW. */
|
||||
|
||||
muto *m;
|
||||
/* FIXME: Make multi-thread aware */
|
||||
for (m = muto_start.next; m != NULL; m = m->next)
|
||||
if (m->unstable () || m->owner () == mainthread.id)
|
||||
m->reset ();
|
||||
|
||||
rc = EXIT_SIGNAL | (rc << 8);
|
||||
if (exit_already++)
|
||||
{
|
||||
@ -1024,6 +1010,20 @@ signal_exit (int rc)
|
||||
ExitProcess (rc);
|
||||
}
|
||||
|
||||
/* We'd like to stop the main thread from executing but when we do that it
|
||||
causes random, inexplicable hangs. So, instead, we set up the priority
|
||||
of this thread really high so that it should do its thing and then exit. */
|
||||
(void) SetThreadPriority (GetCurrentThread (), THREAD_PRIORITY_TIME_CRITICAL);
|
||||
|
||||
/* Unlock any main thread mutos since we're executing with prejudice. */
|
||||
muto *m;
|
||||
for (m = muto_start.next; m != NULL; m = m->next)
|
||||
if (m->unstable () || m->owner () == mainthread.id)
|
||||
m->reset ();
|
||||
|
||||
user_data->resourcelocks->Delete ();
|
||||
user_data->resourcelocks->Init ();
|
||||
|
||||
do_exit (rc);
|
||||
}
|
||||
|
||||
|
@ -185,7 +185,7 @@ kill_pgrp (pid_t pid, int sig)
|
||||
winpids pids;
|
||||
for (unsigned i = 0; i < pids.npids; i++)
|
||||
{
|
||||
pinfo p = pids[i];
|
||||
pinfo p (pids[i]);
|
||||
|
||||
if (!proc_exists (p))
|
||||
continue;
|
||||
|
Loading…
x
Reference in New Issue
Block a user