diff options
author | Karoly Lorentey <[email protected]> | 2005-09-11 09:34:22 +0000 |
---|---|---|
committer | Karoly Lorentey <[email protected]> | 2005-09-11 09:34:22 +0000 |
commit | 3fb8e5d73e6969a67b258a55f19cc4f4d89da639 (patch) | |
tree | 3c6a9f59295c3a2c13625e71fd06f9366ebc90d5 /src | |
parent | 26cbc0482aa9ff3ad74430e3f6a56e831a831aff (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.c | 19 |
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; } |