[commit] Clear current source symtab if belongs to objfile being freed

Fred Fish
2006-01-06T16:26:09Z

On Thursday 05 January 2006 17:08, Jim Blandy wrote:
> Okay. The original patch is fine; consider the doc change I suggested.

Done. Here is the revised patch.

-Fred

2006-01-06 Fred Fish <fnf@specifix.com>

* objfiles.c (source.h): Include.
(free_objfile): Update comment about clear_symtab_users().
(free_objfile): Check all symtabs of objfile being freed and if
one of them is the current source symtab, call
clear_current_source_symtab_and_line().

Index: objfiles.c
===================================================================
RCS file: /cvs/src/src/gdb/objfiles.c,v
retrieving revision 1.62
diff -c -p -r1.62 objfiles.c
*** objfiles.c 17 Dec 2005 22:34:01 -0000 1.62
--- objfiles.c 6 Jan 2006 16:22:26 -0000
***************
*** 45,50 ****
--- 45,51 ----
#include "breakpoint.h"
#include "block.h"
#include "dictionary.h"
+ #include "source.h"

/* Prototypes for local functions */

*************** free_objfile (struct objfile *objfile)
*** 432,441 ****
is unknown, but we play it safe for now and keep each action until
it is shown to be no longer needed. */

! /* I *think* all our callers call clear_symtab_users. If so, no need
! to call this here. */
clear_pc_function_cache ();

/* The last thing we do is free the objfile struct itself. */

objfile_free_data (objfile);
--- 433,456 ----
is unknown, but we play it safe for now and keep each action until
it is shown to be no longer needed. */

! /* Not all our callers call clear_symtab_users (objfile_purge_solibs,
! for example), so we need to call this here. */
clear_pc_function_cache ();

+ /* Check to see if the current_source_symtab belongs to this objfile,
+ and if so, call clear_current_source_symtab_and_line. */
+
+ {
+ struct symtab_and_line cursal = get_current_source_symtab_and_line ();
+ struct symtab *s;
+
+ ALL_OBJFILE_SYMTABS (objfile, s)
+ {
+ if (s == cursal.symtab)
+ clear_current_source_symtab_and_line ();
+ }
+ }
+
/* The last thing we do is free the objfile struct itself. */

objfile_free_data (objfile);