bug-gnu-emacs
[Top][All Lists]
Advanced

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

bug#12251: 24.2.50; crash in note_mouse_highlight


From: martin rudalics
Subject: bug#12251: 24.2.50; crash in note_mouse_highlight
Date: Sat, 25 Aug 2012 15:40:15 +0200

> tried, but got a crash in different place instead.

Interesting.  Could you try the more invasive patch I attached?  I have
no idea what it could break, so please don't do any important work with
it.

martin
bzr diff
=== modified file 'src/buffer.c'
--- src/buffer.c        2012-08-24 04:37:57 +0000
+++ src/buffer.c        2012-08-25 13:16:19 +0000
@@ -1351,7 +1351,7 @@
 A non-nil FLAG means mark the buffer modified.  */)
   (Lisp_Object flag)
 {
-  Lisp_Object fn, buffer, window;
+  Lisp_Object fn, buffer;
 
 #ifdef CLASH_DETECTION
   /* If buffer becoming modified, lock the file.
@@ -1401,8 +1401,7 @@
      buffers without "modifying" buffers, or redisplay should be
      smarter about updating the `*' in mode lines.  --gerd  */
   XSETBUFFER (buffer, current_buffer);
-  window = Fget_buffer_window (buffer, Qt);
-  if (WINDOWP (window))
+  if (!NILP (Fget_buffer_window (buffer, Qt)))
     {
       ++update_mode_lines;
       current_buffer->prevent_redisplay_optimizations_p = 1;
@@ -3195,7 +3194,7 @@
              Lisp_Object window;
 
              window = Foverlay_get (overlay, Qwindow);
-             if (WINDOWP (window) && XWINDOW (window) != w)
+             if (WINDOW_LIVE_P (window) && XWINDOW (window) != w)
                continue;
            }
 
@@ -3337,7 +3336,7 @@
       if (endpos != pos && startpos != pos)
        continue;
       window = Foverlay_get (overlay, Qwindow);
-      if (WINDOWP (window) && XWINDOW (window) != w)
+      if (WINDOW_LIVE_P (window) && XWINDOW (window) != w)
        continue;
       if (startpos == pos
          && (str = Foverlay_get (overlay, Qbefore_string), STRINGP (str)))
@@ -3365,7 +3364,7 @@
       if (endpos != pos && startpos != pos)
        continue;
       window = Foverlay_get (overlay, Qwindow);
-      if (WINDOWP (window) && XWINDOW (window) != w)
+      if (WINDOW_LIVE_P (window) && XWINDOW (window) != w)
        continue;
       if (startpos == pos
          && (str = Foverlay_get (overlay, Qbefore_string), STRINGP (str)))

=== modified file 'src/editfns.c'
--- src/editfns.c       2012-08-21 23:39:56 +0000
+++ src/editfns.c       2012-08-25 12:34:37 +0000
@@ -360,7 +360,7 @@
 
   if (NILP (object))
     XSETBUFFER (object, current_buffer);
-  else if (WINDOWP (object))
+  else if (WINDOW_LIVE_P (object))
     object = XWINDOW (object)->buffer;
 
   if (!BUFFERP (object))

=== modified file 'src/frame.c'
--- src/frame.c 2012-08-22 16:05:04 +0000
+++ src/frame.c 2012-08-25 13:14:31 +0000
@@ -951,7 +951,7 @@
                    || FRAME_ICONIFIED_P (XFRAME (f)))
                  return f;
              }
-           else if (WINDOWP (minibuf))
+           else if (WINDOW_LIVE_P (minibuf))
              {
                if (EQ (FRAME_MINIBUF_WINDOW (XFRAME (f)), minibuf)
                    || EQ (WINDOW_FRAME (XWINDOW (minibuf)), f)
@@ -1010,7 +1010,7 @@
              if (! FRAME_MINIBUF_ONLY_P (XFRAME (f)))
                prev = f;
            }
-         else if (WINDOWP (minibuf))
+         else if (WINDOW_LIVE_P (minibuf))
            {
              if (EQ (FRAME_MINIBUF_WINDOW (XFRAME (f)), minibuf)
                  || EQ (WINDOW_FRAME (XWINDOW (minibuf)), f)
@@ -2150,7 +2150,7 @@
        set_term_frame_name (f, val);
     }
 
-  if (EQ (prop, Qminibuffer) && WINDOWP (val))
+  if (EQ (prop, Qminibuffer) && WINDOW_LIVE_P (val))
     {
       if (! MINI_WINDOW_P (XWINDOW (val)))
        error ("Surrogate minibuffer windows must be minibuffer windows");

=== modified file 'src/keyboard.c'
--- src/keyboard.c      2012-08-23 08:33:56 +0000
+++ src/keyboard.c      2012-08-25 12:34:33 +0000
@@ -3521,7 +3521,7 @@
   frame = event->frame_or_window;
   if (CONSP (frame))
     frame = XCAR (frame);
-  else if (WINDOWP (frame))
+  else if (WINDOW_LIVE_P (frame))
     frame = WINDOW_FRAME (XWINDOW (frame));
 
   /* There are still some events that don't set this field.
@@ -3738,7 +3738,7 @@
   event.kind = HELP_EVENT;
   event.frame_or_window = frame;
   event.arg = object;
-  event.x = WINDOWP (window) ? window : frame;
+  event.x = WINDOW_LIVE_P (window) ? window : frame;
   event.y = help;
   event.code = pos;
   kbd_buffer_store_event (&event);
@@ -4064,7 +4064,7 @@
          clear_event (event);
 
          kbd_fetch_ptr = event + 1;
-         if (!WINDOWP (window))
+         if (!WINDOW_LIVE_P (window))
            window = Qnil;
          obj = Fcons (Qhelp_echo,
                       list5 (frame, help, window, object, position));
@@ -4109,7 +4109,7 @@
          frame = event->frame_or_window;
          if (CONSP (frame))
            frame = XCAR (frame);
-         else if (WINDOWP (frame))
+         else if (WINDOW_LIVE_P (frame))
            frame = WINDOW_FRAME (XWINDOW (frame));
 
          focus = FRAME_FOCUS_FRAME (XFRAME (frame));
@@ -5192,7 +5192,7 @@
     ? window_from_coordinates (f, XINT (x), XINT (y), &part, 0)
     : Qnil;
 
-  if (WINDOWP (window))
+  if (WINDOW_LIVE_P (window))
     {
       /* It's a click in window WINDOW at frame coordinates (X,Y)  */
       struct window *w = XWINDOW (window);
@@ -5621,7 +5621,7 @@
          struct frame *f;
          int fuzz;
 
-         if (WINDOWP (event->frame_or_window))
+         if (WINDOW_LIVE_P (event->frame_or_window))
            f = XFRAME (XWINDOW (event->frame_or_window)->frame);
          else if (FRAMEP (event->frame_or_window))
            f = XFRAME (event->frame_or_window);
@@ -5789,7 +5789,7 @@
          int symbol_num;
          int is_double;
 
-         if (WINDOWP (event->frame_or_window))
+         if (WINDOW_LIVE_P (event->frame_or_window))
            fr = XFRAME (XWINDOW (event->frame_or_window)->frame);
          else if (FRAMEP (event->frame_or_window))
            fr = XFRAME (event->frame_or_window);
@@ -9555,7 +9555,7 @@
                     read using the keymaps in the buffer clicked on,
                     not the current buffer.  If we're at the
                     beginning of a key sequence, switch buffers.  */
-                 if (WINDOWP (window)
+                 if (WINDOW_LIVE_P (window)
                      && BUFFERP (XWINDOW (window)->buffer)
                      && XBUFFER (XWINDOW (window)->buffer) != current_buffer)
                    {
@@ -11249,7 +11249,7 @@
   if (NILP (frame_or_window))
     frame_or_window = selected_window;
 
-  if (WINDOWP (frame_or_window))
+  if (WINDOW_LIVE_P (frame_or_window))
     {
       struct window *w = decode_live_window (frame_or_window);
 

=== modified file 'src/keymap.c'
--- src/keymap.c        2012-08-18 06:06:39 +0000
+++ src/keymap.c        2012-08-25 12:41:07 +0000
@@ -1559,7 +1559,7 @@
 
       window = POSN_WINDOW (position);
 
-      if (WINDOWP (window)
+      if (WINDOW_LIVE_P (window)
          && BUFFERP (XWINDOW (window)->buffer)
          && XBUFFER (XWINDOW (window)->buffer) != current_buffer)
        {

=== modified file 'src/textprop.c'
--- src/textprop.c      2012-08-17 21:12:11 +0000
+++ src/textprop.c      2012-08-25 13:05:53 +0000
@@ -584,7 +584,7 @@
   if (NILP (object))
     XSETBUFFER (object, current_buffer);
 
-  if (WINDOWP (object))
+  if (WINDOW_LIVE_P (object))
     {
       w = XWINDOW (object);
       object = w->buffer;

=== modified file 'src/w32inevt.c'
--- src/w32inevt.c      2012-07-30 17:07:33 +0000
+++ src/w32inevt.c      2012-08-25 13:06:20 +0000
@@ -650,7 +650,7 @@
                 selected now, and the last mouse movement event was
                 not in it.  A minibuffer window will be selected iff
                 it is active.  */
-             if (WINDOWP (mouse_window)
+             if (WINDOW_LIVE_P (mouse_window)
                  && !EQ (mouse_window, last_mouse_window)
                  && !EQ (mouse_window, selected_window))
                {

=== modified file 'src/w32term.c'
--- src/w32term.c       2012-08-18 01:42:52 +0000
+++ src/w32term.c       2012-08-25 13:10:02 +0000
@@ -3927,7 +3927,7 @@
 w32_scroll_bar_handle_click (struct scroll_bar *bar, W32Msg *msg,
                             struct input_event *emacs_event)
 {
-  if (! WINDOWP (bar->window))
+  if (! WINDOW_LIVE_P (bar->window))
     abort ();
 
   emacs_event->kind = SCROLL_BAR_CLICK_EVENT;
@@ -4420,7 +4420,7 @@
                     selected now and last mouse movement event was
                     not in it.  Minibuffer window will be selected
                     only when it is active.  */
-                 if (WINDOWP (window)
+                 if (WINDOW_LIVE_P (window)
                      && !EQ (window, last_window)
                      && !EQ (window, selected_window)
                      /* For click-to-focus window managers

=== modified file 'src/window.c'
--- src/window.c        2012-08-21 09:27:07 +0000
+++ src/window.c        2012-08-25 12:52:42 +0000
@@ -1969,7 +1969,7 @@
      So don't clobber point in that buffer.  */
   if (! EQ (buf, XWINDOW (selected_window)->buffer)
       /* This line helps to fix Horsley's testbug.el bug.  */
-      && !(WINDOWP (BVAR (b, last_selected_window))
+      && !(WINDOW_LIVE_P (BVAR (b, last_selected_window))
           && w != XWINDOW (BVAR (b, last_selected_window))
           && EQ (buf, XWINDOW (BVAR (b, last_selected_window))->buffer)))
     temp_set_point_both (b,
@@ -1980,7 +1980,7 @@
                                         marker_byte_position (w->pointm),
                                         BUF_ZV_BYTE (b)));
 
-  if (WINDOWP (BVAR (b, last_selected_window))
+  if (WINDOW_LIVE_P (BVAR (b, last_selected_window))
       && w == XWINDOW (BVAR (b, last_selected_window)))
     bset_last_selected_window (b, Qnil);
 }
@@ -2205,7 +2205,7 @@
     candidate_p = 0;
   else if (MINI_WINDOW_P (w)
            && (EQ (minibuf, Qlambda)
-              || (WINDOWP (minibuf) && !EQ (minibuf, window))))
+              || (WINDOW_LIVE_P (minibuf) && !EQ (minibuf, window))))
     {
       /* If MINIBUF is `lambda' don't consider any mini-windows.
          If it is a window, consider only that one.  */
@@ -2215,7 +2215,7 @@
     candidate_p = 1;
   else if (NILP (all_frames))
     {
-      eassert (WINDOWP (owindow));
+      eassert (WINDOW_LIVE_P (owindow));
       candidate_p = EQ (w->frame, XWINDOW (owindow)->frame);
     }
   else if (EQ (all_frames, Qvisible))
@@ -2244,7 +2244,7 @@
        && (FRAME_TERMINAL (XFRAME (w->frame))
            == FRAME_TERMINAL (XFRAME (selected_frame)));
     }
-  else if (WINDOWP (all_frames))
+  else if (WINDOW_LIVE_P (all_frames))
     candidate_p = (EQ (FRAME_MINIBUF_WINDOW (f), all_frames)
                   || EQ (XWINDOW (all_frames)->frame, w->frame)
                   || EQ (XWINDOW (all_frames)->frame, FRAME_FOCUS_FRAME (f)));
@@ -2348,7 +2348,7 @@
        {
          if (EQ (XCAR (list), window))
            {
-             if (WINDOWP (candidate))
+             if (WINDOW_LIVE_P (candidate))
                break;
            }
          else if (candidate_window_p (XCAR (list), window, minibuf,
@@ -2356,7 +2356,7 @@
            candidate = XCAR (list);
        }
 
-      if (WINDOWP (candidate))
+      if (WINDOW_LIVE_P (candidate))
        window = candidate;
     }
 
@@ -2580,7 +2580,7 @@
      or Qt otherwise.  */
 
   /* Pick a window to start with.  */
-  if (WINDOWP (obj))
+  if (WINDOW_LIVE_P (obj))
     window = obj;
   else if (f)
     window = FRAME_SELECTED_WINDOW (f);
@@ -3321,7 +3321,7 @@
       return Qt;
     }
 
-  if (WINDOWP (object))
+  if (WINDOW_LIVE_P (object))
     {
       struct window *w = XWINDOW (object);
       mark_window_display_accurate (object, 0);
@@ -5562,7 +5562,7 @@
           the current-selected-window.  So we have to be careful which
           point of the current-buffer we copy into old_point.  */
        if (EQ (XWINDOW (data->current_window)->buffer, new_current_buffer)
-           && WINDOWP (selected_window)
+           && WINDOW_LIVE_P (selected_window)
            && EQ (XWINDOW (selected_window)->buffer, new_current_buffer)
            && !EQ (selected_window, data->current_window))
          old_point = XMARKER (XWINDOW (data->current_window)->pointm)->charpos;
@@ -6495,7 +6495,7 @@
                void *user_data)
 {
   /* delete_frame may set FRAME_ROOT_WINDOW (f) to Qnil.  */
-  if (WINDOWP (FRAME_ROOT_WINDOW (f)))
+  if (WINDOW_VALID_P (FRAME_ROOT_WINDOW (f)))
     foreach_window_1 (XWINDOW (FRAME_ROOT_WINDOW (f)), fn, user_data);
 }
 
@@ -6534,7 +6534,7 @@
 freeze_window_start (struct window *w, void *freeze_p)
 {
   if (MINI_WINDOW_P (w)
-      || (WINDOWP (selected_window) /* Can be nil in corner cases.  */
+      || (WINDOW_LIVE_P (selected_window) /* Can be nil in corner cases.  */
          && (w == XWINDOW (selected_window)
              || (MINI_WINDOW_P (XWINDOW (selected_window))
                  && ! NILP (Vminibuf_scroll_window)

=== modified file 'src/xdisp.c'
--- src/xdisp.c 2012-08-21 23:39:56 +0000
+++ src/xdisp.c 2012-08-25 13:16:16 +0000
@@ -2714,7 +2714,7 @@
          /* Or show the region if we are in the mini-buffer and W is
             the window the mini-buffer refers to.  */
          || (MINI_WINDOW_P (XWINDOW (selected_window))
-             && WINDOWP (minibuf_selected_window)
+             && WINDOW_LIVE_P (minibuf_selected_window)
              && w == XWINDOW (minibuf_selected_window))))
     {
       ptrdiff_t markpos = marker_position (BVAR (current_buffer, mark));
@@ -10082,7 +10082,7 @@
   Vdeactivate_mark = AREF (vector, 1);
   windows_or_buffers_changed = XFASTINT (AREF (vector, 2));
 
-  if (WINDOWP (AREF (vector, 3)))
+  if (WINDOW_LIVE_P (AREF (vector, 3)))
     {
       struct window *w;
       Lisp_Object buffer, charpos, bytepos;
@@ -10251,7 +10251,7 @@
 resize_echo_area_exactly (void)
 {
   if (BUFFERP (echo_area_buffer[0])
-      && WINDOWP (echo_area_window))
+      && WINDOW_LIVE_P (echo_area_window))
     {
       struct window *w = XWINDOW (echo_area_window);
       int resized_p;
@@ -13057,7 +13057,8 @@
 
   /* do_pending_window_change could change the selected_window due to
      frame resizing which makes the selected window too small.  */
-  if (WINDOWP (selected_window) && (w = XWINDOW (selected_window)) != sw)
+  if (WINDOW_LIVE_P (selected_window)
+      && (w = XWINDOW (selected_window)) != sw)
     {
       sw = w;
       reconsider_clip_changes (w, current_buffer);
@@ -13336,7 +13337,7 @@
            {
              do_pending_window_change (1);
              /* If selected_window changed, redisplay again.  */
-             if (WINDOWP (selected_window)
+             if (WINDOW_LIVE_P (selected_window)
                  && (w = XWINDOW (selected_window)) != sw)
                goto retry;
 
@@ -13647,7 +13648,8 @@
   /* If we just did a pending size change, or have additional
      visible frames, or selected_window changed, redisplay again.  */
   if ((windows_or_buffers_changed && !pending)
-      || (WINDOWP (selected_window) && (w = XWINDOW (selected_window)) != sw))
+      || (WINDOW_LIVE_P (selected_window)
+         && (w = XWINDOW (selected_window)) != sw))
     goto retry;
 
   /* Clear the face and image caches.
@@ -26358,7 +26360,7 @@
   Mouse_HLInfo *hlinfo = MOUSE_HL_INFO (XFRAME (w->frame));
 
   /* Quickly resolve the easy cases.  */
-  if (!(WINDOWP (hlinfo->mouse_face_window)
+  if (!(WINDOW_LIVE_P (hlinfo->mouse_face_window)
        && XWINDOW (hlinfo->mouse_face_window) == w))
     return 0;
   if (vpos < hlinfo->mouse_face_beg_row
@@ -27660,7 +27662,7 @@
     clear_mouse_face (hlinfo);
 
   /* Not on a window -> return.  */
-  if (!WINDOWP (window))
+  if (!WINDOW_LIVE_P (window))
     return;
 
   /* Reset help_echo_string. It will get recomputed below.  */

=== modified file 'src/xfaces.c'
--- src/xfaces.c        2012-08-21 10:21:04 +0000
+++ src/xfaces.c        2012-08-25 13:09:58 +0000
@@ -4350,7 +4350,7 @@
         matrices as invalid because they will reference faces freed
         above.  This function is also called when a frame is
         destroyed.  In this case, the root window of F is nil.  */
-      if (WINDOWP (f->root_window))
+      if (WINDOW_VALID_P (f->root_window))
        {
          clear_current_matrices (f);
          ++windows_or_buffers_changed;

=== modified file 'src/xterm.c'
--- src/xterm.c 2012-08-18 01:42:52 +0000
+++ src/xterm.c 2012-08-25 13:09:51 +0000
@@ -4235,7 +4235,7 @@
 
   if (scroll_bar_p
       && strcmp (action_name, end_action) == 0
-      && WINDOWP (window_being_scrolled))
+      && WINDOW_LIVE_P (window_being_scrolled))
     {
       struct window *w;
 
@@ -4512,7 +4512,7 @@
 {
   struct scroll_bar *bar = (struct scroll_bar *) user_data;
   bar->dragging = Qnil;
-  if (WINDOWP (window_being_scrolled))
+  if (WINDOW_LIVE_P (window_being_scrolled))
     {
       x_send_scroll_bar_event (window_being_scrolled,
                                scroll_bar_end_scroll, 0, 0);
@@ -5557,7 +5557,7 @@
 static void
 x_scroll_bar_handle_click (struct scroll_bar *bar, XEvent *event, struct 
input_event *emacs_event)
 {
-  if (! WINDOWP (bar->window))
+  if (! WINDOW_LIVE_P (bar->window))
     abort ();
 
   emacs_event->kind = SCROLL_BAR_CLICK_EVENT;
@@ -6782,7 +6782,7 @@
                 /* Window will be selected only when it is not selected now and
                    last mouse movement event was not in it.  Minibuffer window
                    will be selected only when it is active.  */
-                if (WINDOWP (window)
+                if (WINDOW_LIVE_P (window)
                     && !EQ (window, last_window)
                    && !EQ (window, selected_window)
                    /* For click-to-focus window managers



reply via email to

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