diff --git a/gdb/ChangeLog b/gdb/ChangeLog index d18081e04c..bec33b60e4 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2018-04-23 Tom Tromey + + * guile/scm-frame.c (gdbscm_frame_read_var): Use + gdb::unique_xmalloc_ptr. + 2018-04-23 Tom Tromey * configure: Rebuild. diff --git a/gdb/guile/scm-frame.c b/gdb/guile/scm-frame.c index 4f4766aceb..7b539677ff 100644 --- a/gdb/guile/scm-frame.c +++ b/gdb/guile/scm-frame.c @@ -877,7 +877,6 @@ gdbscm_frame_read_var (SCM self, SCM symbol_scm, SCM rest) } else if (scm_is_string (symbol_scm)) { - char *var_name; const struct block *block = NULL; struct cleanup *cleanup; struct gdb_exception except = exception_none; @@ -893,38 +892,35 @@ gdbscm_frame_read_var (SCM self, SCM symbol_scm, SCM rest) gdbscm_throw (except_scm); } - var_name = gdbscm_scm_to_c_string (symbol_scm); - cleanup = make_cleanup (xfree, var_name); - /* N.B. Between here and the call to do_cleanups, don't do anything - to cause a Scheme exception without performing the cleanup. */ + { + gdb::unique_xmalloc_ptr var_name + (gdbscm_scm_to_c_string (symbol_scm)); + /* N.B. Between here and the end of the scope, don't do anything + to cause a Scheme exception. */ - TRY - { - struct block_symbol lookup_sym; + TRY + { + struct block_symbol lookup_sym; - if (block == NULL) - block = get_frame_block (frame, NULL); - lookup_sym = lookup_symbol (var_name, block, VAR_DOMAIN, NULL); - var = lookup_sym.symbol; - block = lookup_sym.block; - } - CATCH (ex, RETURN_MASK_ALL) - { - except = ex; - } - END_CATCH + if (block == NULL) + block = get_frame_block (frame, NULL); + lookup_sym = lookup_symbol (var_name.get (), block, VAR_DOMAIN, + NULL); + var = lookup_sym.symbol; + block = lookup_sym.block; + } + CATCH (ex, RETURN_MASK_ALL) + { + except = ex; + } + END_CATCH + } - do_cleanups (cleanup); GDBSCM_HANDLE_GDB_EXCEPTION (except); if (var == NULL) - { - do_cleanups (cleanup); - gdbscm_out_of_range_error (FUNC_NAME, 0, symbol_scm, - _("variable not found")); - } - - do_cleanups (cleanup); + gdbscm_out_of_range_error (FUNC_NAME, 0, symbol_scm, + _("variable not found")); } else {