From e20c36baa7a156bf6d299f471142c350288e30d7 Mon Sep 17 00:00:00 2001 From: Jeff Law Date: Mon, 30 Sep 1996 17:16:35 +0000 Subject: [PATCH] * top.c (execute_control_command): Free values from while_control and if_control conditions after evaluation to avoid storage leaks. From Peter Schauer. Fixes 10442. --- gdb/ChangeLog | 6 ++++++ gdb/top.c | 10 +++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 4d5434d9f39..e567db8c1c7 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +Mon Sep 30 11:16:34 1996 Jeffrey A Law (law@cygnus.com) + + * top.c (execute_control_command): Free values from while_control + and if_control conditions after evaluation to avoid storage leaks. + From Peter Schauer. + start-sanitize-v850 Fri Sep 27 17:43:06 1996 Stu Grossman (grossman@critters.cygnus.com) diff --git a/gdb/top.c b/gdb/top.c index a55a9ebfdec..ed196bc2736 100644 --- a/gdb/top.c +++ b/gdb/top.c @@ -813,6 +813,7 @@ execute_control_command (cmd) struct command_line *current; struct cleanup *old_chain = 0; value_ptr val; + value_ptr val_mark; int loop; enum command_control_type ret; char *new_line; @@ -852,13 +853,18 @@ execute_control_command (cmd) /* Keep iterating so long as the expression is true. */ while (loop == 1) { + int cond_result; + QUIT; /* Evaluate the expression. */ + val_mark = value_mark (); val = evaluate_expression (expr); + cond_result = value_true (val); + value_free_to_mark (val_mark); /* If the value is false, then break out of the loop. */ - if (!value_true (val)) + if (!cond_result) break; /* Execute the body of the while statement. */ @@ -906,6 +912,7 @@ execute_control_command (cmd) ret = simple_control; /* Evaluate the conditional. */ + val_mark = value_mark (); val = evaluate_expression (expr); /* Choose which arm to take commands from based on the value of the @@ -914,6 +921,7 @@ execute_control_command (cmd) current = *cmd->body_list; else if (cmd->body_count == 2) current = *(cmd->body_list + 1); + value_free_to_mark (val_mark); /* Execute commands in the given arm. */ while (current) -- 2.30.2