diff src/ui.c @ 12136:60cf03e59402 v8.0.0948

patch 8.0.0948: crash if timer closes window while dragging status line commit https://github.com/vim/vim/commit/989a70c590c2bd109eb362d3a0e48cb1427ae13d Author: Bram Moolenaar <Bram@vim.org> Date: Wed Aug 16 22:46:01 2017 +0200 patch 8.0.0948: crash if timer closes window while dragging status line Problem: Crash if timer closes window while dragging status line. Solution: Check if the window still exists. (Yasuhiro Matsumoto, closes #1979)
author Christian Brabandt <cb@256bit.org>
date Wed, 16 Aug 2017 23:00:05 +0200
parents ca4931a20f8c
children 040a892d0eed
line wrap: on
line diff
--- a/src/ui.c
+++ b/src/ui.c
@@ -2709,6 +2709,8 @@ retnomove:
 #ifdef FEAT_WINDOWS
 	/* find the window where the row is in */
 	wp = mouse_find_win(&row, &col);
+	if (wp == NULL)
+	    return IN_UNKNOWN;
 #else
 	wp = firstwin;
 #endif
@@ -3117,11 +3119,13 @@ mouse_comp_pos(
 /*
  * Find the window at screen position "*rowp" and "*colp".  The positions are
  * updated to become relative to the top-left of the window.
+ * Returns NULL when something is wrong.
  */
     win_T *
 mouse_find_win(int *rowp, int *colp UNUSED)
 {
     frame_T	*fp;
+    win_T	*wp;
 
     fp = topframe;
     *rowp -= firstwin->w_winrow;
@@ -3148,7 +3152,12 @@ mouse_find_win(int *rowp, int *colp UNUS
 	    }
 	}
     }
-    return fp->fr_win;
+    /* When using a timer that closes a window the window might not actually
+     * exist. */
+    FOR_ALL_WINDOWS(wp)
+	if (wp == fp->fr_win)
+	    return wp;
+    return NULL;
 }
 #endif
 
@@ -3171,6 +3180,8 @@ get_fpos_of_mouse(pos_T *mpos)
 #ifdef FEAT_WINDOWS
     /* find the window where the row is in */
     wp = mouse_find_win(&row, &col);
+    if (wp == NULL)
+	return IN_UNKNOWN;
 #else
     wp = firstwin;
 #endif