* exceptions.cc (ctrl_c_handler): Always send signal to process if it has no

tty.
This commit is contained in:
Christopher Faylor
2001-05-04 20:39:38 +00:00
parent 8b3bcfbab9
commit 17743fbc49
17 changed files with 63 additions and 76 deletions

View File

@@ -58,7 +58,7 @@ muto::~muto ()
be handled correctly.
Note: The goal here is to minimize, as much as possible, calls to the
OS. Hence the use of InterlockedIncrement, etc., rather than (much) more
OS. Hence the use of ilockincr, etc., rather than (much) more
expensive OS mutexes. */
int
muto::acquire (DWORD ms)
@@ -69,7 +69,7 @@ muto::acquire (DWORD ms)
{
/* Increment the waiters part of the class. Need to do this first to
avoid potential races. */
LONG was_waiting = InterlockedIncrement (&waiters);
LONG was_waiting = ilockincr (&waiters);
/* This is deceptively simple. Basically, it allows multiple attempts to
lock the same muto to succeed without attempting to manipulate sync.
@@ -82,7 +82,7 @@ muto::acquire (DWORD ms)
case, it is possible for a thread which is going to wait for bruteforce
to wake up immediately. It will then attempt to grab sync but will fail
and go back to waiting. */
while (tid != this_tid && (was_waiting || InterlockedExchange (&sync, 1) != 0))
while (tid != this_tid && (was_waiting || ilockexch (&sync, 1) != 0))
{
switch (WaitForSingleObject (bruteforce, ms))
{
@@ -90,7 +90,7 @@ muto::acquire (DWORD ms)
goto gotit;
break;
default:
InterlockedDecrement (&waiters);
ilockdecr (&waiters);
return 0; /* failed. */
}
}
@@ -117,11 +117,11 @@ muto::release ()
if (!--visits)
{
tid = 0; /* We were the last unlocker. */
(void) InterlockedExchange (&sync, 0); /* Reset trigger. */
(void) ilockexch (&sync, 0); /* Reset trigger. */
/* This thread had incremented waiters but had never decremented it.
Decrement it now. If it is >= 0 then there are possibly other
threads waiting for the lock, so trigger bruteforce. */
if (InterlockedDecrement (&waiters) >= 0)
if (ilockdecr (&waiters) >= 0)
(void) SetEvent (bruteforce); /* Wake up one of the waiting threads */
}
@@ -133,7 +133,7 @@ void
muto::reset ()
{
visits = sync = tid = 0;
InterlockedExchange (&waiters, -1);
ilockexch (&waiters, -1);
if (bruteforce)
{
CloseHandle (bruteforce);