# HG changeset patch # User Gerd Moellmann # Date 948815625 0 # Node ID e28edb0e423318e0abe227a40123addc95425eb2 # Parent e575223479a1bc04c4474d0f70c40b3926fe58df (pending_atimers): Add extern declaration. (UNBLOCK_INPUT): Rewritten. Handle pending atimers. diff -r e575223479a1 -r e28edb0e4233 src/blockinput.h --- a/src/blockinput.h Tue Jan 25 15:53:29 2000 +0000 +++ b/src/blockinput.h Tue Jan 25 15:53:45 2000 +0000 @@ -50,6 +50,12 @@ 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 @@ 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