2004-01-27 Paul N. Hilfinger * breakpoint.c (breakpoint_re_set_one): Set b->cond, b->val, and b->exp to NULL after freeing so that error during re-parsing or evaluation of expressions associated with breakpoint don't eventually lead to re-freeing of storage. Committed by Andrew Cagney. Index: breakpoint.c =================================================================== RCS file: /cvs/src/src/gdb/breakpoint.c,v retrieving revision 1.151 diff -u -r1.151 breakpoint.c --- breakpoint.c 27 Jan 2004 03:13:34 -0000 1.151 +++ breakpoint.c 28 Jan 2004 01:34:34 -0000 @@ -6970,12 +6970,22 @@ /* So for now, just use a global context. */ if (b->exp) - xfree (b->exp); + { + xfree (b->exp); + /* Avoid re-freeing b->exp if an error during the call to + parse_expression. */ + b->exp = NULL; + } b->exp = parse_expression (b->exp_string); b->exp_valid_block = innermost_block; mark = value_mark (); if (b->val) - value_free (b->val); + { + value_free (b->val); + /* Avoid re-freeing b->val if an error during the call to + evaluate_expression. */ + b->val = NULL; + } b->val = evaluate_expression (b->exp); release_value (b->val); if (VALUE_LAZY (b->val) && breakpoint_enabled (b)) @@ -6985,7 +6995,12 @@ { s = b->cond_string; if (b->cond) - xfree (b->cond); + { + xfree (b->cond); + /* Avoid re-freeing b->exp if an error during the call + to parse_exp_1. */ + b->cond = NULL; + } b->cond = parse_exp_1 (&s, (struct block *) 0, 0); } if (breakpoint_enabled (b))