diff options
-rw-r--r-- | src/xfns.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/src/xfns.c b/src/xfns.c index 8b7304025d7..23d85d10e24 100644 --- a/src/xfns.c +++ b/src/xfns.c @@ -1176,13 +1176,19 @@ x_real_positions (f, xptr, yptr) Window wm_window, rootw; Window *tmp_children; unsigned int tmp_nchildren; + int success; - XQueryTree (FRAME_X_DISPLAY (f), win, &rootw, - &wm_window, &tmp_children, &tmp_nchildren); - XFree ((char *) tmp_children); + success = XQueryTree (FRAME_X_DISPLAY (f), win, &rootw, + &wm_window, &tmp_children, &tmp_nchildren); had_errors = x_had_errors_p (FRAME_X_DISPLAY (f)); + /* Don't free tmp_children if XQueryTree failed. */ + if (! success) + break; + + XFree ((char *) tmp_children); + if (wm_window == rootw || had_errors) break; |