Mercurial > emacs
comparison src/data.c @ 83374:0b75ace4f7ad
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
| author | Karoly Lorentey <lorentey@elte.hu> |
|---|---|
| date | Sun, 11 Sep 2005 06:42:03 +0000 |
| parents | 532e0a9335a9 |
| children | 2a679c81f552 |
comparison
equal
deleted
inserted
replaced
| 83373:35ba943c8399 | 83374:0b75ace4f7ad |
|---|---|
| 28 #include "charset.h" | 28 #include "charset.h" |
| 29 #include "buffer.h" | 29 #include "buffer.h" |
| 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> |
| 36 #endif | 37 #endif |
| 37 | 38 |
| 1889 Lisp_Object symbol; | 1890 Lisp_Object symbol; |
| 1890 Lisp_Object device; | 1891 Lisp_Object 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 |
| 1900 DEFUN ("set-terminal-local-value", Fset_terminal_local_value, Sset_terminal_local_value, 3, 3, 0, | 1901 DEFUN ("set-terminal-local-value", Fset_terminal_local_value, Sset_terminal_local_value, 3, 3, 0, |
| 1901 doc: /* Set the terminal-local binding of SYMBOL on DEVICE to VALUE. | 1902 doc: /* Set the terminal-local binding of SYMBOL on DEVICE to VALUE. |
| 1909 Lisp_Object device; | 1910 Lisp_Object device; |
| 1910 Lisp_Object value; | 1911 Lisp_Object value; |
| 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 |
| 1920 /* Find the function at the end of a chain of symbol function indirections. */ | 1921 /* Find the function at the end of a chain of symbol function indirections. */ |
| 1921 | 1922 |
