diff options
author | Jeff Law <law@redhat.com> | 1996-09-30 17:16:35 +0000 |
---|---|---|
committer | Jeff Law <law@redhat.com> | 1996-09-30 17:16:35 +0000 |
commit | e20c36baa7a156bf6d299f471142c350288e30d7 (patch) | |
tree | 49d918c404f1b6a7768e40232dea876a311b8b4b | |
parent | a98ddff362474cb4c9d824490c103a0bf6a535ea (diff) | |
download | gdb-e20c36baa7a156bf6d299f471142c350288e30d7.zip gdb-e20c36baa7a156bf6d299f471142c350288e30d7.tar.gz gdb-e20c36baa7a156bf6d299f471142c350288e30d7.tar.bz2 |
* 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.
-rw-r--r-- | gdb/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/top.c | 10 |
2 files changed, 15 insertions, 1 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 4d5434d..e567db8 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) @@ -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) |