From 752eb8b4565471409d7f6aeda7b86bdef50f82a9 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Thu, 30 May 2013 17:09:02 +0000 Subject: [PATCH] fix two buglets in breakpoint.c First, output_thread_groups leaks a cleanup along one return path. Second, parse_cmd_to_aexpr could return without running its cleanups, if there was an exception in a TRY_CATCH. * breakpoint.c (output_thread_groups, parse_cmd_to_aexpr): Call do_cleanups earlier. --- gdb/ChangeLog | 5 +++++ gdb/breakpoint.c | 9 +++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 56be923095..94db23f62f 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2013-05-30 Tom Tromey + + * breakpoint.c (output_thread_groups, parse_cmd_to_aexpr): Call + do_cleanups earlier. + 2013-05-30 Tom Tromey * machoread.c (macho_symfile_read): Assign first cleanup to diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c index b4d2f27b7b..b5025ac5dd 100644 --- a/gdb/breakpoint.c +++ b/gdb/breakpoint.c @@ -2248,6 +2248,8 @@ parse_cmd_to_aexpr (CORE_ADDR scope, char *cmd) fpieces, nargs, argvec); } + do_cleanups (old_cleanups); + if (ex.reason < 0) { /* If we got here, it means the command could not be parsed to a valid @@ -2256,8 +2258,6 @@ parse_cmd_to_aexpr (CORE_ADDR scope, char *cmd) return NULL; } - do_cleanups (old_cleanups); - /* We have a valid agent expression, return it. */ return aexpr; } @@ -5814,8 +5814,7 @@ output_thread_groups (struct ui_out *uiout, VEC(int) *inf_num, int mi_only) { - struct cleanup *back_to = make_cleanup_ui_out_list_begin_end (uiout, - field_name); + struct cleanup *back_to; int is_mi = ui_out_is_mi_like_p (uiout); int inf; int i; @@ -5825,6 +5824,8 @@ output_thread_groups (struct ui_out *uiout, if (!is_mi && mi_only) return; + back_to = make_cleanup_ui_out_list_begin_end (uiout, field_name); + for (i = 0; VEC_iterate (int, inf_num, i, inf); ++i) { if (is_mi) -- 2.34.1