Mercurial > emacs
diff src/keyboard.c @ 37400:2ac65f4d70e5
(delete_kboard): Prevent a dangling reference
from current_kboard to KB, which is freed.
| author | Gerd Moellmann <gerd@gnu.org> |
|---|---|
| date | Thu, 19 Apr 2001 13:00:01 +0000 |
| parents | 90b4f51bd28b |
| children | a5f0e09ecc67 |
line wrap: on
line diff
--- a/src/keyboard.c Thu Apr 19 12:47:59 2001 +0000 +++ b/src/keyboard.c Thu Apr 19 13:00:01 2001 +0000 @@ -10013,19 +10013,33 @@ } #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 ()
