aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKaroly Lorentey <[email protected]>2005-09-11 09:34:22 +0000
committerKaroly Lorentey <[email protected]>2005-09-11 09:34:22 +0000
commit3fb8e5d73e6969a67b258a55f19cc4f4d89da639 (patch)
tree3c6a9f59295c3a2c13625e71fd06f9366ebc90d5 /src
parent26cbc0482aa9ff3ad74430e3f6a56e831a831aff (diff)
Fix assertion on kboard->kbd_queue and other such crashes.
* src/keyboard.c (pop_kboard): Set current_kboard to the kboard of the selected frame when the stored kboard object has been deleted before pop_kboard. (restore_kboard_configuration): Call pop_kboard only after setting up single_kboard mode. git-archimport-id: [email protected]/emacs--multi-tty--0--patch-418
Diffstat (limited to 'src')
-rw-r--r--src/keyboard.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/src/keyboard.c b/src/keyboard.c
index baf313c7a6..522cfc3ccf 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -1138,8 +1138,23 @@ void
pop_kboard ()
{
#ifdef MULTI_KBOARD
+ struct device *d;
struct kboard_stack *p = kboard_stack;
- current_kboard = p->kboard;
+ int ok = 0;
+ current_kboard = NULL;
+ for (d = device_list; d; d = d->next_device)
+ {
+ if (d->kboard == p->kboard)
+ {
+ current_kboard = p->kboard;
+ break;
+ }
+ }
+ if (current_kboard == NULL)
+ {
+ /* The display we remembered has been deleted. */
+ current_kboard = FRAME_KBOARD (SELECTED_FRAME ());
+ }
kboard_stack = p->next;
xfree (p);
#endif
@@ -1177,11 +1192,11 @@ static Lisp_Object
restore_kboard_configuration (was_locked)
Lisp_Object was_locked;
{
- pop_kboard ();
if (NILP (was_locked))
any_kboard_state ();
else
single_kboard_state ();
+ pop_kboard ();
return Qnil;
}