[ob/pushed] Eliminate cleanup in gdbscm_execute_gdb_command

Message ID 20180718232639.7563-1-palves@redhat.com
State New
Headers show
Series
  • [ob/pushed] Eliminate cleanup in gdbscm_execute_gdb_command
Related show

Commit Message

Pedro Alves July 18, 2018, 11:26 p.m.
Note: the "may be modified" comment is no longer true nowadays.

gdb/ChangeLog:
2018-07-18  Pedro Alves  <palves@redhat.com>

	* guile/guile.c (gdbscm_execute_gdb_command): Adjust to use
	gdbscm_wrap.  Use gdb::unique_xmalloc_ptr<char> instead of a
	cleanup.
---
 gdb/ChangeLog     |  6 ++++++
 gdb/guile/guile.c | 29 ++++++++---------------------
 2 files changed, 14 insertions(+), 21 deletions(-)

-- 
2.14.4

Patch

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 6d1a1c6df23..92c93f494f5 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,9 @@ 
+2018-07-18  Pedro Alves  <palves@redhat.com>
+
+	* guile/guile.c (gdbscm_execute_gdb_command): Adjust to use
+	gdbscm_wrap.  Use gdb::unique_xmalloc_ptr<char> instead of a
+	cleanup.
+
 2018-07-18  Pedro Alves  <palves@redhat.com>
 
 	* guile/guile-internal.h: Add comment about mixing GDB and Scheme
diff --git a/gdb/guile/guile.c b/gdb/guile/guile.c
index 6b5faa38bcc..6353b35326b 100644
--- a/gdb/guile/guile.c
+++ b/gdb/guile/guile.c
@@ -289,22 +289,17 @@  gdbscm_execute_gdb_command (SCM command_scm, SCM rest)
   int from_tty = 0, to_string = 0;
   const SCM keywords[] = { from_tty_keyword, to_string_keyword, SCM_BOOL_F };
   char *command;
-  struct cleanup *cleanups;
-  struct gdb_exception except = exception_none;
 
   gdbscm_parse_function_args (FUNC_NAME, SCM_ARG1, keywords, "s#tt",
 			      command_scm, &command, rest,
 			      &from_tty_arg_pos, &from_tty,
 			      &to_string_arg_pos, &to_string);
 
-  /* Note: The contents of "command" may get modified while it is
-     executed.  */
-  cleanups = make_cleanup (xfree, command);
-
-  std::string to_string_res;
-
-  TRY
+  return gdbscm_wrap ([=]
     {
+      gdb::unique_xmalloc_ptr<char> command_holder (command);
+      std::string to_string_res;
+
       scoped_restore restore_async = make_scoped_restore (&current_ui->async,
 							  0);
 
@@ -316,19 +311,11 @@  gdbscm_execute_gdb_command (SCM command_scm, SCM rest)
 
       /* Do any commands attached to breakpoint we stopped at.  */
       bpstat_do_actions ();
-    }
-  CATCH (ex, RETURN_MASK_ALL)
-    {
-      except = ex;
-    }
-  END_CATCH
-
-  do_cleanups (cleanups);
-  GDBSCM_HANDLE_GDB_EXCEPTION (except);
 
-  if (to_string)
-    return gdbscm_scm_from_c_string (to_string_res.c_str ());
-  return SCM_UNSPECIFIED;
+      if (to_string)
+	return gdbscm_scm_from_c_string (to_string_res.c_str ());
+      return SCM_UNSPECIFIED;
+    });
 }
 
 /* (data-directory) -> string */