Re: [Vala] Invalid pointer error with manual reference handling (g_free instead of g_slice_free)
- From: Amos Brocco <amos brocco gmail com>
- To: vala-list gnome org
- Subject: Re: [Vala] Invalid pointer error with manual reference handling (g_free instead of g_slice_free)
- Date: Sun, 5 Sep 2010 13:15:42 +0200
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 <amos brocco gmail com>
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
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]