Mercurial > emacs
annotate src/blockinput.h @ 18989:6253a99afd95
(rmail-pop-password-error): New variable.
(rmail-insert-inbox-text): If there's an error getting mail from
the POP server, and the error matches rmail-pop-password-error or
we prompted for the POP password, assume that the password is
incorrect and erase it so that the user will be prompted again the
next time he gets mail.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Fri, 25 Jul 1997 22:08:24 +0000 |
parents | ee40177f6c68 |
children | fb4c986db0e2 |
rev | line source |
---|---|
2439
b6c62e4abf59
Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents:
2437
diff
changeset
|
1 /* blockinput.h - interface to blocking complicated interrupt-driven input. |
2437 | 2 Copyright (C) 1989, 1993 Free Software Foundation, Inc. |
3 | |
4 This file is part of GNU Emacs. | |
5 | |
6 GNU Emacs is free software; you can redistribute it and/or modify | |
7 it under the terms of the GNU General Public License as published by | |
8 the Free Software Foundation; either version 2, or (at your option) | |
9 any later version. | |
10 | |
11 GNU Emacs is distributed in the hope that it will be useful, | |
12 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 GNU General Public License for more details. | |
15 | |
16 You should have received a copy of the GNU General Public License | |
17 along with GNU Emacs; see the file COPYING. If not, write to | |
14186
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
2721
diff
changeset
|
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
2721
diff
changeset
|
19 Boston, MA 02111-1307, USA. */ |
2437 | 20 |
21 | |
22 /* When Emacs is using signal-driven input, the processing of those | |
23 input signals can get pretty hairy. For example, when Emacs is | |
24 running under X windows, handling an input signal can entail | |
25 retrieving events from the X event queue, or making other X calls. | |
26 | |
27 If an input signal occurs while Emacs is in the midst of some | |
28 non-reentrant code, and the signal processing invokes that same | |
29 code, we lose. For example, malloc and the Xlib functions aren't | |
30 usually re-entrant, and both are used by the X input signal handler | |
31 - if we try to process an input signal in the midst of executing | |
32 any of these functions, we'll lose. | |
33 | |
34 To avoid this, we make the following requirements: | |
35 | |
36 * Everyone must evaluate BLOCK_INPUT before entering these functions, | |
37 and then call UNBLOCK_INPUT after performing them. Calls | |
38 BLOCK_INPUT and UNBLOCK_INPUT may be nested. | |
39 | |
40 * Any complicated interrupt handling code should test | |
41 interrupt_input_blocked, and put off its work until later. | |
42 | |
43 * If the interrupt handling code wishes, it may set | |
44 interrupt_input_pending to a non-zero value. If that flag is set | |
45 when input becomes unblocked, UNBLOCK_INPUT will send a new SIGIO. */ | |
46 | |
2479
6d011b24f6fe
(interrupt_input_blocked): Make this signed int.
Richard M. Stallman <rms@gnu.org>
parents:
2477
diff
changeset
|
47 extern int interrupt_input_blocked; |
2437 | 48 |
49 /* Nonzero means an input interrupt has arrived | |
50 during the current critical section. */ | |
51 extern int interrupt_input_pending; | |
52 | |
53 /* Begin critical section. */ | |
54 #define BLOCK_INPUT (interrupt_input_blocked++) | |
55 | |
2721
ca5cb6cafc40
* blockinput.h (UNBLOCK_INPUT): We cannot assume that SIGIO is
Jim Blandy <jimb@redhat.com>
parents:
2479
diff
changeset
|
56 /* End critical section. |
ca5cb6cafc40
* blockinput.h (UNBLOCK_INPUT): We cannot assume that SIGIO is
Jim Blandy <jimb@redhat.com>
parents:
2479
diff
changeset
|
57 |
ca5cb6cafc40
* blockinput.h (UNBLOCK_INPUT): We cannot assume that SIGIO is
Jim Blandy <jimb@redhat.com>
parents:
2479
diff
changeset
|
58 If doing signal-driven input, and a signal came in when input was |
ca5cb6cafc40
* blockinput.h (UNBLOCK_INPUT): We cannot assume that SIGIO is
Jim Blandy <jimb@redhat.com>
parents:
2479
diff
changeset
|
59 blocked, reinvoke the signal handler now to deal with it. |
ca5cb6cafc40
* blockinput.h (UNBLOCK_INPUT): We cannot assume that SIGIO is
Jim Blandy <jimb@redhat.com>
parents:
2479
diff
changeset
|
60 |
ca5cb6cafc40
* blockinput.h (UNBLOCK_INPUT): We cannot assume that SIGIO is
Jim Blandy <jimb@redhat.com>
parents:
2479
diff
changeset
|
61 We used to have two possible definitions of this macro - one for |
ca5cb6cafc40
* blockinput.h (UNBLOCK_INPUT): We cannot assume that SIGIO is
Jim Blandy <jimb@redhat.com>
parents:
2479
diff
changeset
|
62 when SIGIO was #defined, and one for when it wasn't; when SIGIO |
ca5cb6cafc40
* blockinput.h (UNBLOCK_INPUT): We cannot assume that SIGIO is
Jim Blandy <jimb@redhat.com>
parents:
2479
diff
changeset
|
63 wasn't #defined, we wouldn't bother to check if we should re-invoke |
ca5cb6cafc40
* blockinput.h (UNBLOCK_INPUT): We cannot assume that SIGIO is
Jim Blandy <jimb@redhat.com>
parents:
2479
diff
changeset
|
64 the signal handler. But that doesn't work very well; some of the |
ca5cb6cafc40
* blockinput.h (UNBLOCK_INPUT): We cannot assume that SIGIO is
Jim Blandy <jimb@redhat.com>
parents:
2479
diff
changeset
|
65 files which use this macro don't #include the right files to get |
ca5cb6cafc40
* blockinput.h (UNBLOCK_INPUT): We cannot assume that SIGIO is
Jim Blandy <jimb@redhat.com>
parents:
2479
diff
changeset
|
66 SIGIO. |
ca5cb6cafc40
* blockinput.h (UNBLOCK_INPUT): We cannot assume that SIGIO is
Jim Blandy <jimb@redhat.com>
parents:
2479
diff
changeset
|
67 |
ca5cb6cafc40
* blockinput.h (UNBLOCK_INPUT): We cannot assume that SIGIO is
Jim Blandy <jimb@redhat.com>
parents:
2479
diff
changeset
|
68 So, we always test interrupt_input_pending now; that's not too |
ca5cb6cafc40
* blockinput.h (UNBLOCK_INPUT): We cannot assume that SIGIO is
Jim Blandy <jimb@redhat.com>
parents:
2479
diff
changeset
|
69 expensive, and it'll never get set if we don't need to resignal. */ |
2437 | 70 #define UNBLOCK_INPUT \ |
71 (interrupt_input_blocked--, \ | |
72 (interrupt_input_blocked < 0 ? (abort (), 0) : 0), \ | |
2477
4d0d858bc33f
(UNBLOCK_INPUT): Fix typo.
Richard M. Stallman <rms@gnu.org>
parents:
2439
diff
changeset
|
73 ((interrupt_input_blocked == 0 && interrupt_input_pending != 0) \ |
2721
ca5cb6cafc40
* blockinput.h (UNBLOCK_INPUT): We cannot assume that SIGIO is
Jim Blandy <jimb@redhat.com>
parents:
2479
diff
changeset
|
74 ? (reinvoke_input_signal (), 0) \ |
2437 | 75 : 0)) |
76 | |
77 #define TOTALLY_UNBLOCK_INPUT (interrupt_input_blocked = 0) | |
78 #define UNBLOCK_INPUT_RESIGNAL UNBLOCK_INPUT |