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