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

Reply via email to