diff options
| author | Karoly Lorentey | 2005-09-11 09:34:22 +0000 |
|---|---|---|
| committer | Karoly Lorentey | 2005-09-11 09:34:22 +0000 |
| commit | 3fb8e5d73e6969a67b258a55f19cc4f4d89da639 (patch) | |
| tree | 3c6a9f59295c3a2c13625e71fd06f9366ebc90d5 /src | |
| parent | 26cbc0482aa9ff3ad74430e3f6a56e831a831aff (diff) | |
| download | emacs-3fb8e5d73e6969a67b258a55f19cc4f4d89da639.tar.gz emacs-3fb8e5d73e6969a67b258a55f19cc4f4d89da639.zip | |
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: lorentey@elte.hu--2004/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 baf313c7a62..522cfc3ccf2 100644 --- a/src/keyboard.c +++ b/src/keyboard.c | |||
| @@ -1138,8 +1138,23 @@ void | |||
| 1138 | pop_kboard () | 1138 | pop_kboard () |
| 1139 | { | 1139 | { |
| 1140 | #ifdef MULTI_KBOARD | 1140 | #ifdef MULTI_KBOARD |
| 1141 | struct device *d; | ||
| 1141 | struct kboard_stack *p = kboard_stack; | 1142 | struct kboard_stack *p = kboard_stack; |
| 1142 | current_kboard = p->kboard; | 1143 | int ok = 0; |
| 1144 | current_kboard = NULL; | ||
| 1145 | for (d = device_list; d; d = d->next_device) | ||
| 1146 | { | ||
| 1147 | if (d->kboard == p->kboard) | ||
| 1148 | { | ||
| 1149 | current_kboard = p->kboard; | ||
| 1150 | break; | ||
| 1151 | } | ||
| 1152 | } | ||
| 1153 | if (current_kboard == NULL) | ||
| 1154 | { | ||
| 1155 | /* The display we remembered has been deleted. */ | ||
| 1156 | current_kboard = FRAME_KBOARD (SELECTED_FRAME ()); | ||
| 1157 | } | ||
| 1143 | kboard_stack = p->next; | 1158 | kboard_stack = p->next; |
| 1144 | xfree (p); | 1159 | xfree (p); |
| 1145 | #endif | 1160 | #endif |
| @@ -1177,11 +1192,11 @@ static Lisp_Object | |||
| 1177 | restore_kboard_configuration (was_locked) | 1192 | restore_kboard_configuration (was_locked) |
| 1178 | Lisp_Object was_locked; | 1193 | Lisp_Object was_locked; |
| 1179 | { | 1194 | { |
| 1180 | pop_kboard (); | ||
| 1181 | if (NILP (was_locked)) | 1195 | if (NILP (was_locked)) |
| 1182 | any_kboard_state (); | 1196 | any_kboard_state (); |
| 1183 | else | 1197 | else |
| 1184 | single_kboard_state (); | 1198 | single_kboard_state (); |
| 1199 | pop_kboard (); | ||
| 1185 | return Qnil; | 1200 | return Qnil; |
| 1186 | } | 1201 | } |
| 1187 | 1202 | ||