* DevNotes: Add entry cgf-000019.
* dcrt0.cc (do_exit): Just set exit_state to ES_EVENTS_TERMINATE and nuke call to events_terminate which just set a superfluous flag. * sigproc.cc (signal_exit_code): New variable. (setup_signal_exit): Define new function. (_cygtls::signal_exit): Remove accommodations for closing the signal pipe handle. (exit_thread): Just sleep if we're exiting. (wait_sig): If signal_exit_code is set, just handle bookkeeping signals and exit ReadFile loop if there is nothing more to process. Call signal_exit at end if signal_exit_code is non-zero. * sigproc.h (setup_signal_exit): Declare new function. * exceptions.cc (sigpacket::process): Use setup_signal_exit to control exiting due to a signal. (exception::handle): Ditto. Query exit_state rather than defunct exit_already to determine if we are exiting. * globals.cc (ES_SIGNAL_EXIT): New enum. * sync.h (lock_process::release): New function for explicitly unlocking muto. (lock_process::~lock_process): Use release method.
This commit is contained in:
@ -55,10 +55,15 @@ public:
|
||||
if (exiting && exit_state < ES_PROCESS_LOCKED)
|
||||
exit_state = ES_PROCESS_LOCKED;
|
||||
}
|
||||
void release ()
|
||||
{
|
||||
locker.release ();
|
||||
skip_unlock = true;
|
||||
}
|
||||
~lock_process ()
|
||||
{
|
||||
if (!skip_unlock)
|
||||
locker.release ();
|
||||
release ();
|
||||
}
|
||||
static void force_release (_cygtls *tid) {locker.release (tid);}
|
||||
friend class dtable;
|
||||
|
Reference in New Issue
Block a user