aboutsummaryrefslogtreecommitdiff
path: root/gdb/breakpoint.c
diff options
context:
space:
mode:
authorTom Tromey <tromey@redhat.com>2013-05-30 17:09:02 +0000
committerTom Tromey <tromey@redhat.com>2013-05-30 17:09:02 +0000
commit752eb8b4565471409d7f6aeda7b86bdef50f82a9 (patch)
treee51d896ff05299fb2f73ea8ca9b18834831a07f0 /gdb/breakpoint.c
parente42d0aa5bac43efc5556ca0e6ad18effd04de4ea (diff)
downloadgdb-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.c9
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)