aboutsummaryrefslogtreecommitdiffstats
path: root/src/data.c
diff options
context:
space:
mode:
authorKaroly Lorentey2005-09-11 06:42:03 +0000
committerKaroly Lorentey2005-09-11 06:42:03 +0000
commit256c9c3a61a5a2c5d394277f5b0f25adb453771d (patch)
tree897024a7092e469356b80c07dae3dbeb045d7e7c /src/data.c
parentee0bcfbce6e8f7055f483976a68b33a2bdd46d14 (diff)
downloademacs-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.c9
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