aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Law <law@redhat.com>1996-09-30 17:16:35 +0000
committerJeff Law <law@redhat.com>1996-09-30 17:16:35 +0000
commite20c36baa7a156bf6d299f471142c350288e30d7 (patch)
tree49d918c404f1b6a7768e40232dea876a311b8b4b
parenta98ddff362474cb4c9d824490c103a0bf6a535ea (diff)
downloadgdb-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/ChangeLog6
-rw-r--r--gdb/top.c10
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)
diff --git a/gdb/top.c b/gdb/top.c
index a55a9eb..ed196bc 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)