public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Tom Tromey <tom@tromey.com>
To: gdb-patches@sourceware.org
Cc: Tom Tromey <tom@tromey.com>
Subject: [RFA 11/23] Remove make_cleanup_free_so
Date: Wed, 03 May 2017 22:46:00 -0000	[thread overview]
Message-ID: <20170503224626.2818-12-tom@tromey.com> (raw)
In-Reply-To: <20170503224626.2818-1-tom@tromey.com>

make_cleanup_free_so is used in a single spot.  This patch introduces
a unique pointer wrapper for struct so_list, and changes this spot to
use it.

2017-05-02  Tom Tromey  <tom@tromey.com>

	* utils.h (make_cleanup_free_so): Remove.
	* utils.c (do_free_so, make_cleanup_free_so): Remove.
	* solist.h (struct so_deleter): New.
	(so_list_up): New typedef.
	* solib-svr4.c (svr4_read_so_list): Use so_list_up.
---
 gdb/ChangeLog    |  8 ++++++++
 gdb/solib-svr4.c | 24 ++++++------------------
 gdb/solist.h     | 12 ++++++++++++
 gdb/utils.c      | 18 ------------------
 gdb/utils.h      |  3 ---
 5 files changed, 26 insertions(+), 39 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 1c3b738..ddf87a3 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,13 @@
 2017-05-02  Tom Tromey  <tom@tromey.com>
 
+	* utils.h (make_cleanup_free_so): Remove.
+	* utils.c (do_free_so, make_cleanup_free_so): Remove.
+	* solist.h (struct so_deleter): New.
+	(so_list_up): New typedef.
+	* solib-svr4.c (svr4_read_so_list): Use so_list_up.
+
+2017-05-02  Tom Tromey  <tom@tromey.com>
+
 	* utils.h (make_cleanup_restore_current_language): Remove.
 	* utils.c (do_restore_current_language)
 	(make_cleanup_restore_current_language): Remove.
diff --git a/gdb/solib-svr4.c b/gdb/solib-svr4.c
index 080fd79..f99e2e2 100644
--- a/gdb/solib-svr4.c
+++ b/gdb/solib-svr4.c
@@ -1350,21 +1350,15 @@ svr4_read_so_list (CORE_ADDR lm, CORE_ADDR prev_lm,
 
   for (; lm != 0; prev_lm = lm, lm = next_lm)
     {
-      struct so_list *newobj;
-      struct cleanup *old_chain;
       int errcode;
       char *buffer;
 
-      newobj = XCNEW (struct so_list);
-      old_chain = make_cleanup_free_so (newobj);
+      so_list_up newobj (XCNEW (struct so_list));
 
       lm_info_svr4 *li = lm_info_read (lm);
       newobj->lm_info = li;
       if (li == NULL)
-	{
-	  do_cleanups (old_chain);
-	  return 0;
-	}
+	return 0;
 
       next_lm = li->l_next;
 
@@ -1373,7 +1367,6 @@ svr4_read_so_list (CORE_ADDR lm, CORE_ADDR prev_lm,
 	  warning (_("Corrupted shared library list: %s != %s"),
 		   paddress (target_gdbarch (), prev_lm),
 		   paddress (target_gdbarch (), li->l_prev));
-	  do_cleanups (old_chain);
 	  return 0;
 	}
 
@@ -1388,7 +1381,6 @@ svr4_read_so_list (CORE_ADDR lm, CORE_ADDR prev_lm,
 
 	  first_l_name = li->l_name;
 	  info->main_lm_addr = li->lm_addr;
-	  do_cleanups (old_chain);
 	  continue;
 	}
 
@@ -1404,7 +1396,6 @@ svr4_read_so_list (CORE_ADDR lm, CORE_ADDR prev_lm,
 	  if (first_l_name == 0 || li->l_name != first_l_name)
 	    warning (_("Can't read pathname for load map: %s."),
 		     safe_strerror (errcode));
-	  do_cleanups (old_chain);
 	  continue;
 	}
 
@@ -1416,15 +1407,12 @@ svr4_read_so_list (CORE_ADDR lm, CORE_ADDR prev_lm,
       /* If this entry has no name, or its name matches the name
 	 for the main executable, don't include it in the list.  */
       if (! newobj->so_name[0] || match_main (newobj->so_name))
-	{
-	  do_cleanups (old_chain);
-	  continue;
-	}
+	continue;
 
-      discard_cleanups (old_chain);
       newobj->next = 0;
-      **link_ptr_ptr = newobj;
-      *link_ptr_ptr = &newobj->next;
+      /* Don't free it now.  */
+      **link_ptr_ptr = newobj.release ();
+      *link_ptr_ptr = &(**link_ptr_ptr)->next;
     }
 
   return 1;
diff --git a/gdb/solist.h b/gdb/solist.h
index 54c9902..5eb2d39 100644
--- a/gdb/solist.h
+++ b/gdb/solist.h
@@ -179,6 +179,18 @@ struct target_so_ops
 /* Free the memory associated with a (so_list *).  */
 void free_so (struct so_list *so);
 
+/* A deleter that calls free_so.  */
+struct so_deleter
+{
+  void operator() (struct so_list *so) const
+  {
+    free_so (so);
+  }
+};
+
+/* A unique pointer to a so_list.  */
+typedef std::unique_ptr<so_list, so_deleter> so_list_up;
+
 /* Return address of first so_list entry in master shared object list.  */
 struct so_list *master_so_list (void);
 
diff --git a/gdb/utils.c b/gdb/utils.c
index 1a66896..7d0b5f4 100644
--- a/gdb/utils.c
+++ b/gdb/utils.c
@@ -289,24 +289,6 @@ make_cleanup_value_free (struct value *value)
   return make_cleanup (do_value_free, value);
 }
 
-/* Helper for make_cleanup_free_so.  */
-
-static void
-do_free_so (void *arg)
-{
-  struct so_list *so = (struct so_list *) arg;
-
-  free_so (so);
-}
-
-/* Make cleanup handler calling free_so for SO.  */
-
-struct cleanup *
-make_cleanup_free_so (struct so_list *so)
-{
-  return make_cleanup (do_free_so, so);
-}
-
 /* Helper function for make_cleanup_clear_parser_state.  */
 
 static void
diff --git a/gdb/utils.h b/gdb/utils.h
index 1f01bdd..8f545c6 100644
--- a/gdb/utils.h
+++ b/gdb/utils.h
@@ -88,9 +88,6 @@ extern struct cleanup *make_cleanup_unpush_target (struct target_ops *ops);
 extern struct cleanup *make_cleanup_value_free_to_mark (struct value *);
 extern struct cleanup *make_cleanup_value_free (struct value *);
 
-struct so_list;
-extern struct cleanup *make_cleanup_free_so (struct so_list *so);
-
 /* A deleter for a hash table.  */
 struct htab_deleter
 {
-- 
2.9.3

  parent reply	other threads:[~2017-05-03 22:46 UTC|newest]

Thread overview: 59+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-05-03 22:46 [RFA 00/23] More miscellaneous C++-ification Tom Tromey
2017-05-03 22:46 ` [RFA 01/23] Introduce and use ui_out_emit_table Tom Tromey
2017-06-02 17:04   ` Pedro Alves
2017-05-03 22:46 ` [RFA 03/23] Use gdb_file_up in find_and_open_script Tom Tromey
2017-06-02 17:24   ` Pedro Alves
2017-07-23 16:08     ` Tom Tromey
2017-05-03 22:46 ` [RFA 10/23] Remove make_cleanup_restore_current_language Tom Tromey
2017-06-02 18:18   ` Pedro Alves
2017-06-05 13:09     ` Tom Tromey
2017-05-03 22:46 ` [RFA 12/23] More uses of scoped_restore Tom Tromey
2017-06-02 18:31   ` Pedro Alves
2017-05-03 22:46 ` [RFA 20/23] Avoid some manual memory management in Python Tom Tromey
2017-06-05 13:55   ` Pedro Alves
2017-05-03 22:46 ` [RFA 23/23] Use gdb_argv_up " Tom Tromey
2017-06-05 16:29   ` Pedro Alves
2017-07-19 22:52     ` Tom Tromey
2017-07-19 22:51       ` Tom Tromey
2017-05-03 22:46 ` [RFA 02/23] Introduce and use gdb_file_up Tom Tromey
2017-06-02 17:08   ` Pedro Alves
2017-05-03 22:46 ` [RFA 09/23] Remove close cleanup Tom Tromey
2017-06-02 18:08   ` Pedro Alves
2017-07-19 22:52     ` Tom Tromey
2017-07-31 19:08       ` Simon Marchi
2017-08-01 21:52         ` Tom Tromey
2017-05-03 22:46 ` [RFA 08/23] Remove an unlink cleanup Tom Tromey
2017-06-02 17:37   ` Pedro Alves
2017-05-03 22:46 ` [RFA 21/23] Remove a cleanup in Python Tom Tromey
2017-06-05 13:56   ` Pedro Alves
2017-05-03 22:46 ` [RFA 14/23] Use unique_xmalloc_ptr in jit.c Tom Tromey
2017-06-02 18:42   ` Pedro Alves
2017-06-05 13:09     ` Tom Tromey
2017-05-03 22:46 ` Tom Tromey [this message]
2017-06-02 18:25   ` [RFA 11/23] Remove make_cleanup_free_so Pedro Alves
2017-05-03 22:46 ` [RFA 22/23] Make gdb_buildargv return a unique pointer Tom Tromey
2017-06-05 16:21   ` Pedro Alves
2017-07-23 17:26     ` Tom Tromey
2017-05-03 22:46 ` [RFA 18/23] Use a scoped_restore for command_nest_depth Tom Tromey
2017-06-05 13:38   ` Pedro Alves
2017-05-03 22:46 ` [RFA 06/23] Change open_terminal_stream to return a gdb_file_up Tom Tromey
2017-06-02 17:31   ` Pedro Alves
2017-05-03 22:46 ` [RFA 05/23] Use gdb_file_up in source.c Tom Tromey
2017-06-02 17:27   ` Pedro Alves
2017-05-03 22:46 ` [RFA 15/23] Use std::vector to avoid cleanups Tom Tromey
2017-06-02 19:22   ` Pedro Alves
2017-07-23 16:06     ` Tom Tromey
2017-05-03 22:46 ` [RFA 07/23] Remove make_cleanup_fclose Tom Tromey
2017-06-02 17:32   ` Pedro Alves
2017-05-03 22:46 ` [RFA 16/23] Remove in_user_command Tom Tromey
2017-06-05 13:27   ` Pedro Alves
2017-05-03 22:46 ` [RFA 19/23] Replace do_restore_instream_cleanup with scoped_restore Tom Tromey
2017-06-05 13:49   ` Pedro Alves
2017-05-03 22:46 ` [RFA 13/23] Replace tui_restore_gdbout " Tom Tromey
2017-06-02 18:34   ` Pedro Alves
2017-05-03 22:46 ` [RFA 17/23] Use a scoped_restore for user_call_depth Tom Tromey
2017-06-05 13:32   ` Pedro Alves
2017-06-05 16:56     ` Tom Tromey
2017-05-03 22:46 ` [RFA 04/23] Use gdb_file_up in fbsd-nat.c Tom Tromey
2017-05-03 23:52   ` John Baldwin
2017-05-29 17:31 ` [RFA 00/23] More miscellaneous C++-ification Tom Tromey

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=20170503224626.2818-12-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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).