diff options
author | Gerd Moellmann <gerd@gnu.org> | 2000-01-25 15:53:45 +0000 |
---|---|---|
committer | Gerd Moellmann <gerd@gnu.org> | 2000-01-25 15:53:45 +0000 |
commit | 95d9dd00bd0208627814b7e3b9f1ac2643fbf0de (patch) | |
tree | f8c4a78a8dcbb73747809034932427a7a0111e6a /src | |
parent | 7555d825715df23e8d7fd27356ae5394bb73a81b (diff) | |
download | emacs-95d9dd00bd0208627814b7e3b9f1ac2643fbf0de.tar.gz |
(pending_atimers): Add extern declaration.
(UNBLOCK_INPUT): Rewritten. Handle pending atimers.
Diffstat (limited to 'src')
-rw-r--r-- | src/blockinput.h | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/src/blockinput.h b/src/blockinput.h index 335b3b5b2d4..4e1d8524142 100644 --- a/src/blockinput.h +++ b/src/blockinput.h @@ -50,6 +50,12 @@ extern int interrupt_input_blocked; during the current critical section. */ extern int interrupt_input_pending; + +/* Non-zero means asynchronous timers should be run when input is + unblocked. */ + +extern int pending_atimers; + /* Begin critical section. */ #define BLOCK_INPUT (interrupt_input_blocked++) @@ -67,12 +73,22 @@ extern int interrupt_input_pending; So, we always test interrupt_input_pending now; that's not too expensive, and it'll never get set if we don't need to resignal. */ -#define UNBLOCK_INPUT \ - (interrupt_input_blocked--, \ - (interrupt_input_blocked < 0 ? (abort (), 0) : 0), \ - ((interrupt_input_blocked == 0 && interrupt_input_pending != 0) \ - ? (reinvoke_input_signal (), 0) \ - : 0)) + +#define UNBLOCK_INPUT \ + do \ + { \ + --interrupt_input_blocked; \ + if (interrupt_input_blocked == 0) \ + { \ + if (interrupt_input_pending) \ + reinvoke_input_signal (); \ + if (pending_atimers) \ + do_pending_atimers (); \ + } \ + else if (interrupt_input_blocked < 0) \ + abort (); \ + } \ + while (0) #define TOTALLY_UNBLOCK_INPUT (interrupt_input_blocked = 0) #define UNBLOCK_INPUT_RESIGNAL UNBLOCK_INPUT |