]> git.eshelyaron.com Git - emacs.git/commitdiff
(delete_kboard): Prevent a dangling reference
authorGerd Moellmann <gerd@gnu.org>
Thu, 19 Apr 2001 13:00:29 +0000 (13:00 +0000)
committerGerd Moellmann <gerd@gnu.org>
Thu, 19 Apr 2001 13:00:29 +0000 (13:00 +0000)
from current_kboard to KB, which is freed.

src/ChangeLog
src/keyboard.c

index bf411ea416f028234c0791ba81ea6fef8907898a..16ed41713059f1cb429e82a3d5d9de555c8b5d9d 100644 (file)
@@ -1,5 +1,8 @@
 2001-04-19  Gerd Moellmann  <gerd@gnu.org>
 
+       * 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.
index 1d984be4fcc52fbdde3c77ae8f482dfb8a21e5eb..a9dd324a381594c2b9265715cf138ff888851a05 100644 (file)
@@ -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 ()