[Vala] Invalid pointer error with manual reference handling (g_free instead of g_slice_free)

I'm implementing a compact class with manual reference handling, following
the example given in http://live.gnome.org/Vala/ReferenceHandling):

[CCode (ref_function = "foo_up", unref_function = "foo_down")]
public class Foo {

    public int ref_count = 1;

    public unowned Foo up () {
        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?



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

[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]