From 9720679936fc4f710d718f13d903c7826e048a36 Mon Sep 17 00:00:00 2001 From: Patrick Palka Date: Sat, 25 Apr 2015 21:59:02 -0400 Subject: [PATCH] Fix PR gdb/18155 For no good reason the function tui_free_window() is freeing the locator window when we pass it an SRC_WIN or a DISASSEM_WIN. This behavior doesn't make much sense because the locator window is always visible and its contents do not change when the main window changes. This behavior triggers the above PR because when we switch from one TUI window to another (in the PR, from the src window to the asm window) we call tui_free_window() on the previously active window (in the PR, the src window). The function then frees the src window along with the locator window and later we segfault when the now-active asm window tries to query the locator window about the inferior's PC. This patch fixes this apparently wrong behavior by changing tui_free_window() to not free the locator window when we pass it an SRC_WIN or a DISASSEM_WIN. gdb/ChangeLog: PR gdb/18155 * tui/tui-data.c (tui_free_window): Don't free the locator window when passed an SRC_WIN or a DISASSEM_WIN. --- gdb/ChangeLog | 6 ++++++ gdb/tui/tui-data.c | 7 ------- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 44af045dfa..1ff7a75277 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2015-04-28 Patrick Palka + + PR gdb/18155 + * tui/tui-data.c (tui_free_window): Don't free the locator + window when passed an SRC_WIN or a DISASSEM_WIN. + 2015-04-28 Patrick Palka * tui/tui-data.h (struct tui_win_element): Forward-declare. diff --git a/gdb/tui/tui-data.c b/gdb/tui/tui-data.c index 44c1febbde..ffd80d5912 100644 --- a/gdb/tui/tui-data.c +++ b/gdb/tui/tui-data.c @@ -719,13 +719,6 @@ tui_free_window (struct tui_win_info *win_info) { case SRC_WIN: case DISASSEM_WIN: - generic_win = tui_locator_win_info_ptr (); - if (generic_win != (struct tui_gen_win_info *) NULL) - { - tui_delete_win (generic_win->handle); - generic_win->handle = (WINDOW *) NULL; - } - tui_free_win_content (generic_win); if (win_info->detail.source_info.fullname) { xfree (win_info->detail.source_info.fullname);