* exceptions.cc (interruptible): Change method for determining if something is

interruptible.
(call_handler): Avoid suspending a thread if it owns a mutex.  Only set
signal_arrived if the thread was actually interrupted.
(events_init): Initialize module information needed by interruptible().
(sigdelayed): Don't call sig_dispatch_pending since it could screw up
* init.cc (dll_entry): Record module handle of main for use by interruptible().
(proc_subproc): Reorganize handling of terminated child so that the bulk of the
processing comes from the signal thread.
(wait_sig): Force processing of waiting threads if SIGCHLD is not processed.
* sync.cc (muto::release): Set tid == 0 after lock is released or signal
processor will be confused.
This commit is contained in:
Christopher Faylor
2000-02-24 02:49:44 +00:00
parent 58dabf5040
commit f02f1f1444
17 changed files with 164 additions and 96 deletions

View File

@ -1,6 +1,6 @@
/* sync.h: Header file for cygwin synchronization primitives.
Copyright 1999 Cygnus Solutions.
Copyright 1999, 2000 Cygnus Solutions.
Written by Christopher Faylor <cgf@cygnus.com>
@ -36,6 +36,7 @@ public:
/* Return true if caller thread owns the lock. */
int ismine () {return tid == GetCurrentThreadId ();}
DWORD owner () {return tid;}
};
/* Use a statically allocated buffer as the storage for a muto */