diff options
author | Tom Tromey <tromey@redhat.com> | 2013-05-30 17:09:02 +0000 |
---|---|---|
committer | Tom Tromey <tromey@redhat.com> | 2013-05-30 17:09:02 +0000 |
commit | 752eb8b4565471409d7f6aeda7b86bdef50f82a9 (patch) | |
tree | e51d896ff05299fb2f73ea8ca9b18834831a07f0 /gdb/breakpoint.c | |
parent | e42d0aa5bac43efc5556ca0e6ad18effd04de4ea (diff) | |
download | gdb-752eb8b4565471409d7f6aeda7b86bdef50f82a9.zip gdb-752eb8b4565471409d7f6aeda7b86bdef50f82a9.tar.gz gdb-752eb8b4565471409d7f6aeda7b86bdef50f82a9.tar.bz2 |
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.
Diffstat (limited to 'gdb/breakpoint.c')
-rw-r--r-- | gdb/breakpoint.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c index b4d2f27..b5025ac 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) |