Ok, I'm replying to myself... I found that if I replace the line delete (void*) this;
with some more explicit memory release: GLib.Slice.free (sizeof(Foo), (void*) this); everything works as expected. 2010/8/26 Amos Brocco <[email protected]> > I'm implementing a compact class with manual reference handling, following > the example given in http://live.gnome.org/Vala/ReferenceHandling): > > [Compact] > [CCode (ref_function = "foo_up", unref_function = "foo_down")] > public class Foo { > > public int ref_count = 1; > > public unowned Foo up () { > ++ref_count; > return this; > } > > public void down () { > if (--ref_count == 0) { > delete (void*) this; > } > } > > public void method () { } > } > > void main () { > Foo foo = new Foo (); // allocate, ref > foo.method (); > Foo bar = foo; // ref > } // unref, unref => free > > > The program crashes when doing "delete (void*) this;" because the code is > translated to > > g_free ((void*) self); > > instead of a > > g_slice_free (GryaFoo, self); > > Is it a compiler error? > > cheers > > A. > > Note: > this is the same problem as reported by someone on ubuntu forums > http://ubuntuforums.org/showthread.php?p=9728355... don't known if a > message was already posted here... if so, sorry for the duplication :P > >
_______________________________________________ vala-list mailing list [email protected] http://mail.gnome.org/mailman/listinfo/vala-list
