11-10-28 Sterling Augustine <saugustine@google.com>
* psymtab.c (map_symbol_filenames_psymtab): Call QUIT. * symtab.c (free_completion_list): New function. (do_free_completion_list): Likewise. (default_make_symbol_completion_list_break_on): New variable back_to. Call make_cleanup and discard_cleanups. (make_source_files_completion_list): Likewise.
This commit is contained in:
parent
d6a5d40c76
commit
821296b70d
3 changed files with 41 additions and 0 deletions
|
@ -1,3 +1,12 @@
|
|||
2011-10-28 Sterling Augustine <saugustine@google.com>
|
||||
|
||||
* psymtab.c (map_symbol_filenames_psymtab): Call QUIT.
|
||||
* symtab.c (free_completion_list): New function.
|
||||
(do_free_completion_list): Likewise.
|
||||
(default_make_symbol_completion_list_break_on): New variable
|
||||
back_to. Call make_cleanup and discard_cleanups.
|
||||
(make_source_files_completion_list): Likewise.
|
||||
|
||||
2011-10-28 Paul Koning <paul_koning@dell.com>
|
||||
|
||||
* python/lib/gdb/types.py (deep_items): Rename from deepitems.
|
||||
|
|
|
@ -1093,6 +1093,7 @@ map_symbol_filenames_psymtab (struct objfile *objfile,
|
|||
if (ps->readin)
|
||||
continue;
|
||||
|
||||
QUIT;
|
||||
fullname = psymtab_to_fullname (ps);
|
||||
(*fun) (ps->filename, fullname, data);
|
||||
}
|
||||
|
|
31
gdb/symtab.c
31
gdb/symtab.c
|
@ -3573,6 +3573,30 @@ compare_symbol_name (const char *name, const char *sym_text, int sym_text_len)
|
|||
return 1;
|
||||
}
|
||||
|
||||
/* Free any memory associated with a completion list. */
|
||||
|
||||
static void
|
||||
free_completion_list (char ***list_ptr)
|
||||
{
|
||||
int i = 0;
|
||||
char **list = *list_ptr;
|
||||
|
||||
while (list[i] != NULL)
|
||||
{
|
||||
xfree (list[i]);
|
||||
i++;
|
||||
}
|
||||
xfree (list);
|
||||
}
|
||||
|
||||
/* Callback for make_cleanup. */
|
||||
|
||||
static void
|
||||
do_free_completion_list (void *list)
|
||||
{
|
||||
free_completion_list (list);
|
||||
}
|
||||
|
||||
/* Helper routine for make_symbol_completion_list. */
|
||||
|
||||
static int return_val_size;
|
||||
|
@ -3810,6 +3834,7 @@ default_make_symbol_completion_list_break_on (char *text, char *word,
|
|||
/* Length of sym_text. */
|
||||
int sym_text_len;
|
||||
struct add_name_data datum;
|
||||
struct cleanup *back_to;
|
||||
|
||||
/* Now look for the symbol we are supposed to complete on. */
|
||||
{
|
||||
|
@ -3886,6 +3911,7 @@ default_make_symbol_completion_list_break_on (char *text, char *word,
|
|||
return_val_index = 0;
|
||||
return_val = (char **) xmalloc ((return_val_size + 1) * sizeof (char *));
|
||||
return_val[0] = NULL;
|
||||
back_to = make_cleanup (do_free_completion_list, &return_val);
|
||||
|
||||
datum.sym_text = sym_text;
|
||||
datum.sym_text_len = sym_text_len;
|
||||
|
@ -3995,6 +4021,7 @@ default_make_symbol_completion_list_break_on (char *text, char *word,
|
|||
macro_for_each (macro_user_macros, add_macro_name, &datum);
|
||||
}
|
||||
|
||||
discard_cleanups (back_to);
|
||||
return (return_val);
|
||||
}
|
||||
|
||||
|
@ -4244,12 +4271,15 @@ make_source_files_completion_list (char *text, char *word)
|
|||
char **list = (char **) xmalloc (list_alloced * sizeof (char *));
|
||||
const char *base_name;
|
||||
struct add_partial_filename_data datum;
|
||||
struct cleanup *back_to;
|
||||
|
||||
list[0] = NULL;
|
||||
|
||||
if (!have_full_symbols () && !have_partial_symbols ())
|
||||
return list;
|
||||
|
||||
back_to = make_cleanup (do_free_completion_list, &list);
|
||||
|
||||
ALL_SYMTABS (objfile, s)
|
||||
{
|
||||
if (not_interesting_fname (s->filename))
|
||||
|
@ -4285,6 +4315,7 @@ make_source_files_completion_list (char *text, char *word)
|
|||
datum.list_used = &list_used;
|
||||
datum.list_alloced = &list_alloced;
|
||||
map_partial_symbol_filenames (maybe_add_partial_symtab_filename, &datum);
|
||||
discard_cleanups (back_to);
|
||||
|
||||
return list;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue