* 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.
This commit is contained in:
Jeff Law 1996-09-30 17:16:35 +00:00
parent a98ddff362
commit e20c36baa7
2 changed files with 15 additions and 1 deletions

View File

@ -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)

View File

@ -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)