emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] /srv/bzr/emacs/trunk r108619: Fix bug #11677 with segfault


From: Eli Zaretskii
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r108619: Fix bug #11677 with segfault when deleting windows under -batch.
Date: Sat, 16 Jun 2012 10:18:44 +0300
User-agent: Bazaar (2.5.0)

------------------------------------------------------------
revno: 108619
fixes bug: http://debbugs.gnu.org/11677
committer: Eli Zaretskii <address@hidden>
branch nick: trunk
timestamp: Sat 2012-06-16 10:18:44 +0300
message:
  Fix bug #11677 with segfault when deleting windows under -batch.
  
   src/window.c (Fdelete_other_windows_internal)
   (Fdelete_window_internal): Don't access frame's mouse highlight
   info of the initial frame.
modified:
  src/ChangeLog
  src/window.c
=== modified file 'src/ChangeLog'
--- a/src/ChangeLog     2012-06-14 04:02:35 +0000
+++ b/src/ChangeLog     2012-06-16 07:18:44 +0000
@@ -1,3 +1,9 @@
+2012-06-16  Eli Zaretskii  <address@hidden>
+
+       * window.c (Fdelete_other_windows_internal)
+       (Fdelete_window_internal): Don't access frame's mouse highlight
+       info of the initial frame.  (Bug#11677)
+
 2012-06-14  Paul Eggert  <address@hidden>
 
        * .gdbinit (xgetint): Fix recently-introduced paren typo.

=== modified file 'src/window.c'
--- a/src/window.c      2012-06-01 03:41:03 +0000
+++ b/src/window.c      2012-06-16 07:18:44 +0000
@@ -2566,7 +2566,6 @@
   Lisp_Object sibling, pwindow, swindow IF_LINT (= Qnil), delta;
   ptrdiff_t startpos IF_LINT (= 0);
   int top IF_LINT (= 0), new_top, resize_failed;
-  Mouse_HLInfo *hlinfo;
 
   w = decode_any_window (window);
   XSETWINDOW (window, w);
@@ -2647,19 +2646,23 @@
     }
 
   BLOCK_INPUT;
-  hlinfo = MOUSE_HL_INFO (f);
-  /* We are going to free the glyph matrices of WINDOW, and with that
-     we might lose any information about glyph rows that have some of
-     their glyphs highlighted in mouse face.  (These rows are marked
-     with a non-zero mouse_face_p flag.)  If WINDOW indeed has some
-     glyphs highlighted in mouse face, signal to frame's up-to-date
-     hook that mouse highlight was overwritten, so that it will
-     arrange for redisplaying the highlight.  */
-  if (EQ (hlinfo->mouse_face_window, window))
+  if (!FRAME_INITIAL_P (f))
     {
-      hlinfo->mouse_face_beg_row = hlinfo->mouse_face_beg_col = -1;
-      hlinfo->mouse_face_end_row = hlinfo->mouse_face_end_col = -1;
-      hlinfo->mouse_face_window = Qnil;
+        Mouse_HLInfo *hlinfo = MOUSE_HL_INFO (f);
+
+      /* We are going to free the glyph matrices of WINDOW, and with
+        that we might lose any information about glyph rows that have
+        some of their glyphs highlighted in mouse face.  (These rows
+        are marked with a non-zero mouse_face_p flag.)  If WINDOW
+        indeed has some glyphs highlighted in mouse face, signal to
+        frame's up-to-date hook that mouse highlight was overwritten,
+        so that it will arrange for redisplaying the highlight.  */
+      if (EQ (hlinfo->mouse_face_window, window))
+       {
+         hlinfo->mouse_face_beg_row = hlinfo->mouse_face_beg_col = -1;
+         hlinfo->mouse_face_end_row = hlinfo->mouse_face_end_col = -1;
+         hlinfo->mouse_face_window = Qnil;
+       }
     }
   free_window_matrices (r);
 
@@ -3903,7 +3906,6 @@
       && EQ (r->new_total, (horflag ? r->total_cols : r->total_lines)))
     /* We can delete WINDOW now.  */
     {
-      Mouse_HLInfo *hlinfo;
 
       /* Block input.  */
       BLOCK_INPUT;
@@ -3911,9 +3913,13 @@
 
       /* If this window is referred to by the dpyinfo's mouse
         highlight, invalidate that slot to be safe (Bug#9904).  */
-      hlinfo = MOUSE_HL_INFO (XFRAME (w->frame));
-      if (EQ (hlinfo->mouse_face_window, window))
-       hlinfo->mouse_face_window = Qnil;
+      if (!FRAME_INITIAL_P (f))
+       {
+         Mouse_HLInfo *hlinfo = MOUSE_HL_INFO (f);
+
+         if (EQ (hlinfo->mouse_face_window, window))
+           hlinfo->mouse_face_window = Qnil;
+       }
 
       windows_or_buffers_changed++;
       Vwindow_list = Qnil;


reply via email to

[Prev in Thread] Current Thread [Next in Thread]