Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Tom Tromey <tom@tromey.com>
To: gdb-patches@sourceware.org
Cc: Tom Tromey <tom@tromey.com>
Subject: [PATCH 06/12] Remove clear_symtab_users_cleanup
Date: Wed, 09 Jan 2019 03:34:00 -0000	[thread overview]
Message-ID: <20190109033426.16062-7-tom@tromey.com> (raw)
In-Reply-To: <20190109033426.16062-1-tom@tromey.com>

This removes clear_symtab_users_cleanup, replacing it with uses of
cleanup_function.

gdb/ChangeLog
2019-01-08  Tom Tromey  <tom@tromey.com>

	* symfile.c (syms_from_objfile_1): Use cleanup_function.
	(clear_symtab_users_cleanup): Remove.
	(reread_symbols): Use cleanup_function.
---
 gdb/ChangeLog |  6 ++++++
 gdb/symfile.c | 31 ++++++++++++++++---------------
 2 files changed, 22 insertions(+), 15 deletions(-)

diff --git a/gdb/symfile.c b/gdb/symfile.c
index 8858098f48..e5ac521451 100644
--- a/gdb/symfile.c
+++ b/gdb/symfile.c
@@ -59,6 +59,7 @@
 #include "common/byte-vector.h"
 #include "selftest.h"
 #include "cli/cli-style.h"
+#include "common/cleanup-function.h"
 
 #include <sys/types.h>
 #include <fcntl.h>
@@ -79,8 +80,6 @@ void (*deprecated_show_load_progress) (const char *section,
 void (*deprecated_pre_add_symbol_hook) (const char *);
 void (*deprecated_post_add_symbol_hook) (void);
 
-static void clear_symtab_users_cleanup (void *ignore);
-
 /* Global variables owned by this file.  */
 int readnow_symbol_files;	/* Read full symbols immediately.  */
 int readnever_symbol_files;	/* Never read full symbols.  */
@@ -923,7 +922,6 @@ syms_from_objfile_1 (struct objfile *objfile,
 		     symfile_add_flags add_flags)
 {
   section_addr_info local_addr;
-  struct cleanup *old_chain;
   const int mainline = add_flags & SYMFILE_MAINLINE;
 
   objfile_set_sym_fns (objfile, find_sym_fns (objfile->obfd));
@@ -945,7 +943,12 @@ syms_from_objfile_1 (struct objfile *objfile,
 
   /* Make sure that partially constructed symbol tables will be cleaned up
      if an error occurs during symbol reading.  */
-  old_chain = make_cleanup (null_cleanup, NULL);
+  auto clear_users_func
+    = [] ()
+      {
+	clear_symtab_users (0);
+      };
+  gdb::optional<cleanup_function> defer_clear_users;
   std::unique_ptr<struct objfile> objfile_holder (objfile);
 
   /* If ADDRS is NULL, put together a dummy address list.
@@ -958,7 +961,7 @@ syms_from_objfile_1 (struct objfile *objfile,
     {
       /* We will modify the main symbol table, make sure that all its users
          will be cleaned up if an error occurs during symbol reading.  */
-      make_cleanup (clear_symtab_users_cleanup, 0 /*ignore*/);
+      defer_clear_users.emplace (clear_users_func);
 
       /* Since no error yet, throw away the old symbol table.  */
 
@@ -999,7 +1002,7 @@ syms_from_objfile_1 (struct objfile *objfile,
   /* Discard cleanups as symbol reading was successful.  */
 
   objfile_holder.release ();
-  discard_cleanups (old_chain);
+  defer_clear_users->cancel ();
 }
 
 /* Same as syms_from_objfile_1, but also initializes the objfile
@@ -2434,7 +2437,6 @@ reread_symbols (void)
       new_modtime = new_statbuf.st_mtime;
       if (new_modtime != objfile->mtime)
 	{
-	  struct cleanup *old_cleanups;
 	  struct section_offsets *offsets;
 	  int num_offsets;
 
@@ -2454,7 +2456,12 @@ reread_symbols (void)
 	  std::unique_ptr<struct objfile> objfile_holder (objfile);
 
 	  /* We need to do this whenever any symbols go away.  */
-	  old_cleanups = make_cleanup (clear_symtab_users_cleanup, 0 /*ignore*/);
+	  auto clear_users_func
+	    = [] ()
+	      {
+		clear_symtab_users (0);
+	      };
+	  cleanup_function defer_clear_users (clear_users_func);
 
 	  if (exec_bfd != NULL
 	      && filename_cmp (bfd_get_filename (objfile->obfd),
@@ -2618,7 +2625,7 @@ reread_symbols (void)
 
 	  /* Discard cleanups as symbol reading was successful.  */
 	  objfile_holder.release ();
-	  discard_cleanups (old_cleanups);
+	  defer_clear_users.cancel ();
 
 	  /* If the mtime has changed between the time we set new_modtime
 	     and now, we *want* this to be out of date, so don't call stat
@@ -2895,12 +2902,6 @@ clear_symtab_users (symfile_add_flags add_flags)
   if ((add_flags & SYMFILE_DEFER_BP_RESET) == 0)
     breakpoint_re_set ();
 }
-
-static void
-clear_symtab_users_cleanup (void *ignore)
-{
-  clear_symtab_users (0);
-}
 \f
 /* OVERLAYS:
    The following code implements an abstraction for debugging overlay sections.
-- 
2.17.2


  parent reply	other threads:[~2019-01-09  3:34 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-01-12 11:50 [PATCH 00/12] remove some cleanups using a cleanup function Andrew Burgess
2019-01-09  3:34 ` Tom Tromey
2019-01-09  3:34   ` [PATCH 01/12] Remove delete_longjmp_breakpoint_cleanup Tom Tromey
2019-01-09  3:34   ` [PATCH 11/12] Update cleanup comment in ui-out.h Tom Tromey
2019-01-09  3:34   ` [PATCH 07/12] Remove delete_just_stopped_threads_infrun_breakpoints_cleanup Tom Tromey
2019-01-09  3:34   ` [PATCH 04/12] Remove cleanup_delete_std_terminate_breakpoint Tom Tromey
2019-01-09  3:34   ` [PATCH 05/12] Remove cleanup from linux-nat.c Tom Tromey
2019-01-09  3:34   ` [PATCH 03/12] Remove make_bpstat_clear_actions_cleanup Tom Tromey
2019-01-09  3:34   ` [PATCH 10/12] Update an obsolete cleanup comment Tom Tromey
2019-01-09  3:34   ` [PATCH 08/12] Remove cleanup from stop_all_threads Tom Tromey
2019-01-09  3:34   ` [PATCH 09/12] Remove remaining cleanup from fetch_inferior_event Tom Tromey
2019-01-09  3:34   ` [PATCH 12/12] Use cleanup_function in regcache.c Tom Tromey
2019-01-09  3:34   ` Tom Tromey [this message]
2019-01-09  3:36   ` [PATCH 02/12] Remove remaining cleanup from breakpoint.c Tom Tromey
2019-01-11  6:56   ` [PATCH 00/12] remove some cleanups using a cleanup function Joel Brobecker
2019-01-12 11:50   ` [PATCH 3/4] gdb: Remove make_bpstat_clear_actions_cleanup Andrew Burgess
2019-01-12 11:50   ` [PATCH 1/4] gdb: Remove delete_longjmp_breakpoint_cleanup Andrew Burgess
2019-01-12 11:50   ` [PATCH 2/4] gdb: Remove remaining cleanup from breakpoint.c Andrew Burgess
2019-01-12 11:50   ` [PATCH 4/4] gdb/testsuite: Don't allow paths to appear in test name Andrew Burgess
2019-01-12 15:54 ` [PATCH 00/12] remove some cleanups using a cleanup function Tom Tromey
2019-01-12 22:41   ` Tom Tromey
2019-01-14 11:06     ` Andrew Burgess
2019-01-14 15:39       ` Pedro Alves
2019-01-14 20:37 ` Pedro Alves
2019-01-15  9:42   ` Andrew Burgess
     [not found]     ` <87ef9dttfl.fsf@tromey.com>
2019-01-15 23:43       ` Pedro Alves
2019-01-16 11:19         ` Andrew Burgess
2019-01-16 23:10         ` Pedro Alves
2019-01-17 21:39           ` Tom Tromey
2019-01-21 20:12             ` Pedro Alves

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190109033426.16062-7-tom@tromey.com \
    --to=tom@tromey.com \
    --cc=gdb-patches@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox