Critical error while getting the value of a property if it's type is GLib.Error
I'm getting GLib-GObject-CRITICAL **: 00:23:30.614: g_value_set_pointer: assertion 'G_VALUE_HOLDS_POINTER (value)' failed
while trying to get Error
property into a value of Error
type.
It happens in latest stable version (0.56.4) and latest unstable from git.
Here's an example:
errordomain MyError {
MY_ERROR,
}
class MyClass : Object {
public Error? error { get; set; }
}
int main() {
var it = new MyClass();
it.error = new MyError.MY_ERROR ("");
Value val = Value (typeof (Error));
it.get_property("error", ref val);
return 0;
}
Looking at generated code, I noticed that the property is installed using g_param_spec_boxed
but it's getter uses g_value_set_pointer
.
g_object_class_install_property (G_OBJECT_CLASS (klass), MYCLASS_ERROR_PROPERTY, myclass_properties[MYCLASS_ERROR_PROPERTY] = g_param_spec_boxed ("error", "error", "error", G_TYPE_ERROR, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
static void
_vala_myclass_get_property (GObject * object,
guint property_id,
GValue * value,
GParamSpec * pspec)
{
MyClass * self;
self = G_TYPE_CHECK_INSTANCE_CAST (object, TYPE_MYCLASS, MyClass);
switch (property_id) {
case MYCLASS_ERROR_PROPERTY:
g_value_set_pointer (value, myclass_get_error (self));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
}
}
Edited by Alexander Burobin