diff --git a/gdb/ChangeLog b/gdb/ChangeLog index b2694cefde..564983b2a5 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2010-02-16 Daniel Jacobowitz + + * gcore.c (do_bfd_delete_cleanup): New function. + (gcore_command): Use it. Discard the cleanup after success. + (gcore_copy_callback): Delete dead code. + 2010-02-16 Daniel Jacobowitz * symfile.c (addr_info_make_relative): Always use diff --git a/gdb/gcore.c b/gdb/gcore.c index dd945905a6..d8e7ed44f1 100644 --- a/gdb/gcore.c +++ b/gdb/gcore.c @@ -102,6 +102,16 @@ write_gcore_file (bfd *obfd) } } +static void +do_bfd_delete_cleanup (void *arg) +{ + bfd *obfd = arg; + const char *filename = obfd->filename; + + bfd_close (arg); + unlink (filename); +} + /* gcore_command -- implements the 'gcore' command. Generate a core file from the inferior process. */ @@ -132,8 +142,8 @@ gcore_command (char *args, int from_tty) /* Open the output file. */ obfd = create_gcore_bfd (corefilename); - /* Need a cleanup that will close the file (FIXME: delete it?). */ - old_chain = make_cleanup_bfd_close (obfd); + /* Need a cleanup that will close and delete the file. */ + old_chain = make_cleanup (do_bfd_delete_cleanup, obfd); /* Call worker function. */ write_gcore_file (obfd); @@ -141,9 +151,8 @@ gcore_command (char *args, int from_tty) /* Succeeded. */ fprintf_filtered (gdb_stdout, "Saved corefile %s\n", corefilename); - /* Clean-ups will close the output file and free malloc memory. */ - do_cleanups (old_chain); - return; + discard_cleanups (old_chain); + bfd_close (obfd); } static unsigned long @@ -521,9 +530,6 @@ gcore_copy_callback (bfd *obfd, asection *osec, void *ignored) size = min (total_size, MAX_COPY_BYTES); memhunk = xmalloc (size); - /* ??? This is crap since xmalloc should never return NULL. */ - if (memhunk == NULL) - error (_("Not enough memory to create corefile.")); old_chain = make_cleanup (xfree, memhunk); while (total_size > 0)