diff options
| author | Karoly Lorentey | 2005-09-11 06:42:03 +0000 |
|---|---|---|
| committer | Karoly Lorentey | 2005-09-11 06:42:03 +0000 |
| commit | 256c9c3a61a5a2c5d394277f5b0f25adb453771d (patch) | |
| tree | 897024a7092e469356b80c07dae3dbeb045d7e7c /src/data.c | |
| parent | ee0bcfbce6e8f7055f483976a68b33a2bdd46d14 (diff) | |
| download | emacs-256c9c3a61a5a2c5d394277f5b0f25adb453771d.tar.gz emacs-256c9c3a61a5a2c5d394277f5b0f25adb453771d.zip | |
Fix crash after y-or-n-p prompt triggered by emacsclient. (Reported by Han Boetes, analysis by Kalle Olavi Niemitalo.)
* src/keyboard.c (temporarily_switch_to_single_kboard)
(record_single_kboard_state, restore_kboard_configuration): New functions.
(timer_check): Use record_single_kboard_state instead of
naive single_kboard state management.
* src/fns.c: Include termhooks.h.
(Fy_or_n_p): Use temporarily_switch_to_single_kboard to prevent crashes
caused by bogus longjmps in read_char.
* src/callint.c (Fcall_interactively): Use
temporarily_switch_to_single_kboard instead of single_kboard_state.
Make sure it is correctly unwinded.
* src/keyboard.c (recursive_edit_unwind): Remove single_kboard stuff.
(Frecursive_edit): Use temporarily_switch_to_single_kboard for
single_kboard state management.
* src/minibuf.c (read_minibuf): Use temporarily_switch_to_single_kboard
instead of simply calling single_kboard_state.
* src/keyboard.c (push_device_kboard): Remove function.
(push_kboard): New function.
(push_frame_kboard): Use it.
(pop_frame_kboard): Rename to pop_kboard.
* src/xdisp.c (display_mode_line, Fformat_mode_line): Update uses.
* src/data.c: Include termhooks.h.
(Fterminal_local_value, Fset_terminal_local_value): Update.
* src/Makefile.in (data.o, fns.o): Add termhooks.h dependency.
* src/keyboard.h (push_device_kboard, pop_frame_kboard): Remove declarations.
(push_kboard, pop_kboard, temporarily_switch_to_single_kboard)
(record_single_kboard_state): New declarations.
git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-414
Diffstat (limited to 'src/data.c')
| -rw-r--r-- | src/data.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/src/data.c b/src/data.c index b187a3e748a..b024511d779 100644 --- a/src/data.c +++ b/src/data.c | |||
| @@ -30,6 +30,7 @@ Boston, MA 02110-1301, USA. */ | |||
| 30 | #include "keyboard.h" | 30 | #include "keyboard.h" |
| 31 | #include "frame.h" | 31 | #include "frame.h" |
| 32 | #include "syssignal.h" | 32 | #include "syssignal.h" |
| 33 | #include "termhooks.h" /* For FRAME_KBOARD reference in y-or-n-p. */ | ||
| 33 | 34 | ||
| 34 | #ifdef STDC_HEADERS | 35 | #ifdef STDC_HEADERS |
| 35 | #include <float.h> | 36 | #include <float.h> |
| @@ -1891,9 +1892,9 @@ selected frame's display device). */) | |||
| 1891 | { | 1892 | { |
| 1892 | Lisp_Object result; | 1893 | Lisp_Object result; |
| 1893 | struct device *d = get_device (device, 1); | 1894 | struct device *d = get_device (device, 1); |
| 1894 | push_device_kboard (d); | 1895 | push_kboard (d->kboard); |
| 1895 | result = Fsymbol_value (symbol); | 1896 | result = Fsymbol_value (symbol); |
| 1896 | pop_frame_kboard (); | 1897 | pop_kboard (); |
| 1897 | return result; | 1898 | return result; |
| 1898 | } | 1899 | } |
| 1899 | 1900 | ||
| @@ -1911,9 +1912,9 @@ selected frame's display device). */) | |||
| 1911 | { | 1912 | { |
| 1912 | Lisp_Object result; | 1913 | Lisp_Object result; |
| 1913 | struct device *d = get_device (device, 1); | 1914 | struct device *d = get_device (device, 1); |
| 1914 | push_device_kboard (d); | 1915 | push_kboard (d->kboard); |
| 1915 | result = Fset (symbol, value); | 1916 | result = Fset (symbol, value); |
| 1916 | pop_frame_kboard (); | 1917 | pop_kboard (); |
| 1917 | return result; | 1918 | return result; |
| 1918 | } | 1919 | } |
| 1919 | 1920 | ||