[RFA/commit] Memory leak in on reading frame register

Joel Brobecker brobecker@adacore.com
Fri May 15 15:58:00 GMT 2015


> >> Not sure about this.
> >>
> >> How come this in bpstat_check_breakpoint_conditions didn't
> >> handle this issue already? :
> >>
> >> ...
> >>       /* 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 ();
> >>
> >> ...
> >>       value_free_to_mark (mark);
> > 
> > An excellent question, which I will try to research in the next
> > couple of days!
> 
> Thanks.  I wonder whether the leaks come from constructing the
> current frame at each stop, instead of from evaluating
> breakpoint conditions.  E.g.., if we do a "step" over:
> 
>    while (1);
> 
> ... are we constantly leaking values until the user does
> ctrl-c?
> 
> That would suggest to me to that we should be doing
> value_mark/value_free_to_mark around each
> handle_inferior_event.

A very accurate guess, as it turns out. Condition evaluation
is not the problem, here, but indeed, we a couple of calls to
handle_inferior in addition to each call to
bpstat_check_breakpoint_conditions. The former are responsible
for the leak.

How about the attached patch?

gdb/ChangeLog:

        * infrun.c (handle_inferior_event_1): Renames handle_inferior_event.
        (handle_inferior_event): New function.

Tested on x86_64-linux. No regression.

Thanks!
-- 
Joel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-Memory-leak-reading-frame-register-during-inferior-e.patch
Type: text/x-diff
Size: 2306 bytes
Desc: not available
URL: <http://sourceware.org/pipermail/gdb-patches/attachments/20150515/80254985/attachment.bin>


More information about the Gdb-patches mailing list