Yes it is true, I'm sorry my fault. I'm rying your last fix
2014/1/4 Luca Bruno <[email protected]> > I see "destroy pippo" with valac-0.22. > > > On Sat, Jan 4, 2014 at 9:28 PM, Michele Dionisio < > [email protected]> wrote: > >> I will try, reading the comment on git it seams a problem introduced in >> vala 0.23.1 but I have test also vala-0.22 and it have the same problem. >> >> >> 2014/1/4 Luca Bruno <[email protected]> >> >>> I've just fixed the bug in vala git master, can you check? >>> Commit 550b107896 >>> >>> >>> On Sat, Jan 4, 2014 at 7:56 PM, Luca Bruno <[email protected]>wrote: >>> >>>> Please report a bug at bugzilla.gnome.org . >>>> So, using "o" in the lambda seems to be the problem. >>>> >>>> >>>> On Sat, Jan 4, 2014 at 7:39 PM, Michele Dionisio < >>>> [email protected]> wrote: >>>> >>>>> Hi, I'm new in this mailing list and quite new in vala programming. >>>>> >>>>> I have a big software that somethime leak objct. Now I have replicate >>>>> the >>>>> issue with a small code: >>>>> >>>>> >>>>> ############################################################################ >>>>> class Pippo: Object { >>>>> public async void foo () { >>>>> Object o = new Object (); >>>>> stdout.printf("out-- %u\n",o.ref_count); >>>>> stdout.printf("this -- %u\n",this.ref_count); >>>>> >>>>> SourceFunc f = () => { >>>>> stdout.printf("infunc-- %u\n",o.ref_count); >>>>> stdout.printf("in this -- %u\n",this.ref_count); >>>>> //this.unref(); >>>>> stdout.printf("in this -- %u\n",this.ref_count); >>>>> stdout.printf("end function f\n"); >>>>> return false; >>>>> }; >>>>> GLib.Idle.add( (owned) f ); >>>>> >>>>> stdout.printf("end function foo\n"); >>>>> } >>>>> >>>>> ~Pippo() { >>>>> stdout.printf("destroy pippo\n"); >>>>> } >>>>> } >>>>> >>>>> void main() { >>>>> Pippo ? tmp = new Pippo(); >>>>> >>>>> tmp.foo.begin(); >>>>> >>>>> MainLoop loop = new MainLoop (); >>>>> >>>>> GLib.Timeout.add(1000, () => {stdout.printf("timeout1\n"); tmp >>>>> = >>>>> null; return false;}); >>>>> >>>>> GLib.Timeout.add(2000, () => {stdout.printf("timeout2\n"); >>>>> loop.quit(); return false;}); >>>>> >>>>> >>>>> loop.run (); >>>>> } >>>>> >>>>> >>>>> ############################################################################ >>>>> >>>>> If in the function >>>>> SourceFunc f >>>>> >>>>> there is any reference to any variable of foo or to any object of this >>>>> we >>>>> have the reference counting of this increase. >>>>> >>>>> and so after timeout1 the object tmp is not destroy. (And there is no >>>>> reference on it) >>>>> >>>>> The only way to fix the issue is to manually decrease the reference of >>>>> this. But this is a big workaraound. >>>>> >>>>> Someone have any idea where is my fault or if there is a bug in vala >>>>> itself? >>>>> >>>>> regards >>>>> _______________________________________________ >>>>> vala-list mailing list >>>>> [email protected] >>>>> https://mail.gnome.org/mailman/listinfo/vala-list >>>>> >>>> >>>> >>>> >>>> -- >>>> www.debian.org - The Universal Operating System >>>> >>> >>> >>> >>> -- >>> www.debian.org - The Universal Operating System >>> >> >> > > > -- > www.debian.org - The Universal Operating System > _______________________________________________ vala-list mailing list [email protected] https://mail.gnome.org/mailman/listinfo/vala-list
