Fix PR gdb/18155

Message ID 1430060929-13968-1-git-send-email-patrick@parcs.ath.cx
State New, archived
Headers

Commit Message

Patrick Palka April 26, 2015, 3:08 p.m. UTC
  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:

	* tui/tui-data.c (tui_free_window): Don't free the locator
	window when passed an SRC_WIN or a DISASSEM_WIN.
---
 gdb/tui/tui-data.c | 7 -------
 1 file changed, 7 deletions(-)
  

Comments

Pedro Alves April 27, 2015, 5:45 p.m. UTC | #1
On 04/26/2015 04:08 PM, Patrick Palka wrote:
> 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:
> 
> 	* tui/tui-data.c (tui_free_window): Don't free the locator
> 	window when passed an SRC_WIN or a DISASSEM_WIN.

OK.

Thanks,
Pedro Alves
  

Patch

diff --git a/gdb/tui/tui-data.c b/gdb/tui/tui-data.c
index 44c1feb..ffd80d5 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);