aboutsummaryrefslogtreecommitdiff
path: root/gdb/breakpoint.c
diff options
context:
space:
mode:
authorDaniel Jacobowitz <drow@false.org>2009-03-11 20:26:02 +0000
committerDaniel Jacobowitz <drow@false.org>2009-03-11 20:26:02 +0000
commitc5bc3a77a2085c737a1ced35de5470ffea2a646c (patch)
tree65d31a39321d6d530f58253c55970a5288954a6e /gdb/breakpoint.c
parent09e8c3bf89960586cdca95e1ccf044be35497ae0 (diff)
downloadgdb-c5bc3a77a2085c737a1ced35de5470ffea2a646c.zip
gdb-c5bc3a77a2085c737a1ced35de5470ffea2a646c.tar.gz
gdb-c5bc3a77a2085c737a1ced35de5470ffea2a646c.tar.bz2
* breakpoint.c (bpstat_check_breakpoint_conditions): Use
value_mark and value_free_to_mark. * objfiles.c (free_objfile): Call objfile_free_data before freeing the BFD.
Diffstat (limited to 'gdb/breakpoint.c')
-rw-r--r--gdb/breakpoint.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index 893e1c2..472eda4 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -2882,6 +2882,13 @@ bpstat_check_breakpoint_conditions (bpstat bs, ptid_t ptid)
if (bl->cond && bl->owner->disposition != disp_del_at_next_stop)
{
+ /* We use value_mark and value_free_to_mark because it could
+ be a long time before we return to the command level and
+ call free_all_values. We can't call free_all_values
+ because we might be in the middle of evaluating a
+ function call. */
+ struct value *mark = value_mark ();
+
/* Need to select the frame, with all that implies
so that the conditions will have the right context. */
select_frame (get_current_frame ());
@@ -2890,7 +2897,7 @@ bpstat_check_breakpoint_conditions (bpstat bs, ptid_t ptid)
"Error in testing breakpoint condition:\n",
RETURN_MASK_ALL);
/* FIXME-someday, should give breakpoint # */
- free_all_values ();
+ value_free_to_mark (mark);
}
if (bl->cond && value_is_zero)
{