mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-25 06:50:46 -08:00
(interrupt_handle): New variable.
(init_crit): Initialize it. (delete_crit): Cleanup on exit. (signal_quit): New function. Signal any threads that are blocked on a "system" call (provided they have been specially written to check for this), so the call can fail with EINTR as on Unix.
This commit is contained in:
parent
85348a1744
commit
1ce3dc2b2d
1 changed files with 22 additions and 0 deletions
|
|
@ -33,6 +33,7 @@ Boston, MA 02111-1307, USA. */
|
|||
CRITICAL_SECTION critsect;
|
||||
extern HANDLE keyboard_handle;
|
||||
HANDLE input_available = NULL;
|
||||
HANDLE interrupt_handle = NULL;
|
||||
|
||||
void
|
||||
init_crit ()
|
||||
|
|
@ -42,6 +43,14 @@ init_crit ()
|
|||
/* For safety, input_available should only be reset by get_next_msg
|
||||
when the input queue is empty, so make it a manual reset event. */
|
||||
keyboard_handle = input_available = CreateEvent (NULL, TRUE, FALSE, NULL);
|
||||
|
||||
/* interrupt_handle is signalled when quit (C-g) is detected, so that
|
||||
blocking system calls can be interrupted. We make it a manual
|
||||
reset event, so that if we should ever have multiple threads
|
||||
performing system calls, they will all be interrupted (I'm guessing
|
||||
that would the right response). Note that we use PulseEvent to
|
||||
signal this event, so that it never remains signalled. */
|
||||
interrupt_handle = CreateEvent (NULL, TRUE, FALSE, NULL);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -54,6 +63,19 @@ delete_crit ()
|
|||
CloseHandle (input_available);
|
||||
input_available = NULL;
|
||||
}
|
||||
if (interrupt_handle)
|
||||
{
|
||||
CloseHandle (interrupt_handle);
|
||||
interrupt_handle = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
signal_quit ()
|
||||
{
|
||||
/* Make sure this event never remains signalled; if the main thread
|
||||
isn't in a blocking call, then this should do nothing. */
|
||||
PulseEvent (interrupt_handle);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue