Index: psymtab.c =================================================================== RCS file: /cvs/src/src/gdb/psymtab.c,v retrieving revision 1.30 diff -d -u -r1.30 psymtab.c --- psymtab.c 10 Jun 2011 21:48:04 -0000 1.30 +++ psymtab.c 27 Oct 2011 19:39:02 -0000 @@ -1093,6 +1093,7 @@ if (ps->readin) continue; + QUIT; fullname = psymtab_to_fullname (ps); (*fun) (ps->filename, fullname, data); } Index: symtab.c =================================================================== RCS file: /cvs/src/src/gdb/symtab.c,v retrieving revision 1.283 diff -d -u -r1.283 symtab.c --- symtab.c 21 Jul 2011 15:13:29 -0000 1.283 +++ symtab.c 27 Oct 2011 19:39:02 -0000 @@ -3573,6 +3573,26 @@ 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); +} + +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 +3830,7 @@ /* 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 +3907,7 @@ 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 +4017,7 @@ macro_for_each (macro_user_macros, add_macro_name, &datum); } + discard_cleanups (back_to); return (return_val); } @@ -4244,12 +4267,15 @@ 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 +4311,7 @@ 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; }