[RFA,11/11] Change captured_mi_execute_command to use scoped_restore
Commit Message
Change captured_mi_execute_command to use a scoped_restore, removing a
cleanup. The old code copied the current token, but I don't believe
that is necessary.
ChangeLog
2017-09-12 Tom Tromey <tom@tromey.com>
* mi/mi-main.c (captured_mi_execute_command): Use scope_restore.
---
gdb/ChangeLog | 4 ++++
gdb/mi/mi-main.c | 9 +++------
2 files changed, 7 insertions(+), 6 deletions(-)
Comments
On 09/12/2017 07:57 PM, Tom Tromey wrote:
> Change captured_mi_execute_command to use a scoped_restore, removing a
> cleanup. The old code copied the current token, but I don't believe
> that is necessary.
>
I tried to see if it was safe, and I think it is. I wondered whether
the command to be executed could itself run an MI command with a token,
and whether that'd clobber the original token. Like, e.g. (contrived):
321-interpreter-exec mi "123-thread-info"
we currently get:
123^done,threads=[]
321^done
(gdb)
Looks like that's OK because we create a separate parse object for each
of the commands.
> ChangeLog
> 2017-09-12 Tom Tromey <tom@tromey.com>
>
> * mi/mi-main.c (captured_mi_execute_command): Use scope_restore.
OK.
Thanks,
Pedro Alves
@@ -1,5 +1,9 @@
2017-09-12 Tom Tromey <tom@tromey.com>
+ * mi/mi-main.c (captured_mi_execute_command): Use scope_restore.
+
+2017-09-12 Tom Tromey <tom@tromey.com>
+
* mi/mi-cmd-info.c (mi_cmd_info_ada_exceptions): Update.
* ada-lang.h (struct ada_exc_info): Remove typedef. Declare
operator< and operator==.
@@ -1870,20 +1870,19 @@ mi_cmd_remove_inferior (const char *command, char **argv, int argc)
Return <0 for error; >=0 for ok.
args->action will tell mi_execute_command what action
- to perfrom after the given command has executed (display/suppress
+ to perform after the given command has executed (display/suppress
prompt, display error). */
static void
captured_mi_execute_command (struct ui_out *uiout, struct mi_parse *context)
{
struct mi_interp *mi = (struct mi_interp *) command_interp ();
- struct cleanup *cleanup;
if (do_timings)
current_command_ts = context->cmd_start;
- current_token = xstrdup (context->token);
- cleanup = make_cleanup (free_current_contents, ¤t_token);
+ scoped_restore save_token = make_scoped_restore (¤t_token,
+ context->token);
running_result_record_printed = 0;
mi_proceeded = 0;
@@ -1959,8 +1958,6 @@ captured_mi_execute_command (struct ui_out *uiout, struct mi_parse *context)
break;
}
}
-
- do_cleanups (cleanup);
}
/* Print a gdb exception to the MI output stream. */