On Sat, 2013-12-14 at 15:25 +0800, Nor Jaidi Tuah wrote:
> Dear all,
>
> I had a memory leak in my app that I traced to
> a delegate variable. Something like this:
>
> class X {
> delegate void Delegate ();
> Delegate d;
>
> public void xx () {
> d = () => { do_stuff ();};
> }
> }
>
> Given the above, the following will leak memory:
>
> {
> new X(). xx ();
> }
>
> I think this is because there is an unavoidable
> reference cycle between d and the X object. Is
> this correct? If not, then it may be a vala bug.It's correct. > I can fix the memory leak by setting d to null > before the X object gets unreffed (this makes > it sound like a vala bug). Unfortunately Vala can't know that this is a safe thing to do. It would require some very advanced analysis, and would break completely in some very common situations (like if the field weren't private, or d could also be set somewhere else with a value which didn't cause a reference count) which would mean a class of *very* difficult to diagnose and understand. Instead, you might want to consider making the field unowned, and maybe using a regular method instead of a closure just to be sure. -Evan
signature.asc
Description: This is a digitally signed message part
_______________________________________________ vala-list mailing list [email protected] https://mail.gnome.org/mailman/listinfo/vala-list
