From: Gerd Moellmann Date: Thu, 19 Apr 2001 13:00:29 +0000 (+0000) Subject: (delete_kboard): Prevent a dangling reference X-Git-Tag: emacs-pretest-21.0.103~167 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=a122a38eee71e4541bfca49cecb6ed3b4d824cfe;p=emacs.git (delete_kboard): Prevent a dangling reference from current_kboard to KB, which is freed. --- diff --git a/src/ChangeLog b/src/ChangeLog index bf411ea416f..16ed4171305 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,8 @@ 2001-04-19 Gerd Moellmann + * keyboard.c (delete_kboard): Prevent a dangling reference + from current_kboard to KB, which is freed. + * process.c (wait_reading_process_input): Call record_asynch_buffer_change after running timers, to make read_key_sequence aware of buffer changes from under it. diff --git a/src/keyboard.c b/src/keyboard.c index 1d984be4fcc..a9dd324a381 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -10013,19 +10013,33 @@ wipe_kboard (kb) } #ifdef MULTI_KBOARD + +/* Free KB and memory referenced from it. */ + void delete_kboard (kb) - KBOARD *kb; + KBOARD *kb; { KBOARD **kbp; + for (kbp = &all_kboards; *kbp != kb; kbp = &(*kbp)->next_kboard) if (*kbp == NULL) abort (); *kbp = kb->next_kboard; + + /* Prevent a dangling reference to KB. */ + if (kb == current_kboard) + { + current_kboard = SELECTED_FRAME ()->kboard; + if (current_kboard == kb) + abort (); + } + wipe_kboard (kb); xfree (kb); } -#endif + +#endif /* MULTI_KBOARD */ void init_keyboard ()