Re: [Vala] GObject.get() + struct in Vala is problematic



On 09/14/2012 05:21 PM, Derek Dai wrote:
Hi:

For example,
Clutter.Color bg;
Clutter.Actor rect = new Clutter.Rectangle();
rect.get("background-color", out bg);

Since GObject.get() will return a copied Clutter.Color, the second
parameter must be a pointer to a Clutter.Color pointer (ClutterColor **).
But since you actually pass in a Clutter.Color pointer (ClutterColor *),
what you got is address filled in first 4 bytes of bg and memory leak, in
this example.

I tried this way
Clutter.Color * bg;
Clutter.Actor rect = new Clutter.Rectangle();
rect.get("background-color", out bg);

bg will point to returned Clutter.Color, but I don't know the right way to
free it.

While I'm a bit sceptical about your premise (I would have assumed that
g_object_get would simply copy the structure into memory you provide, as
in your original example - but I don't know a lot about GObject, or
clutter), this is how to free the memory, assuming g_object_new does
return a pointer to memory that you're responsible for:

delete bg;


In clutter-1.0.vapi, Clutter.Color has free() method, I can invoke
it like
bg->free();

But Vala code generator will copy it into another Clutter.Color (just like
another primitive types) which is on the stack and pass it to the
Clutter.Color.free(), eg.
ClutterColor * tmp5;
tmp5 = * bg;
clutter_color_free(& tmp5);

This causes glibc dumpping and aborting our process. I also tried free with
delete keyword, but with no luck, the generated C code simple free with
g_free()
g_free(bg);

Derek Dai


On Fri, Sep 14, 2012 at 8:00 PM, <vala-list-request gnome org> wrote:

eed to do



_______________________________________________
vala-list mailing list
vala-list gnome org
https://mail.gnome.org/mailman/listinfo/vala-list





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