The program below gets two errors GLib-CRITICAL **: g_hash_table_lookup: assertion `hash_table != NULL' failed at /home/gg/bug/glib-sig-ret-undef/foo.pl line 44. [gperl_value_from_sv] FIXME: unhandled type - 0 ((null) fundamental for (null)) I think the first is gperl_fundamental_wrapper_class_from_type() called when "wrapper_class_by_type" is NULL. Is that supposed to be at least possible? Maybe when _gperl_sv_from_value_internal() gets a signal's return value which is a new fundamental type from some C code, when neither that new type nor anything else has ever yet told to gperl_register_fundamental_full()? I think the second is because gperl_signal_class_closure_marshal() tries to gperl_value_from_sv() into a GValue which is G_TYPE_NONE. Dunno if a return_value location like that is supposed to be allowed, but gtk_binding_entry_activate() calls g_signal_emitv() that way. I guess gperl_signal_class_closure_marshal() should do the same as gperl_closure_marshal() does and don't store the sv to return_value if the latter is G_TYPE_NONE. (gperl_closure_marshal() is of course what you get if you specify a class_closure instead of the default name "do_mysig".) I suppose the alternative is to look at the signal info and do nothing at all if the return_type is NONE, no matter what return_value arg the caller tried to ask for. But I'm not up with what the duties of a marshaller are supposed to be. Incidentally there's only a problem if a do_mysig() like this returns a non-undef value. But there's no requirement for handlers or class handlers to explicitly return undef if the handler is spec'ed as return_type G_TYPE_NONE, is there?
Attachment:
foo.pl
Description: Text Data
Attachment:
GType.xs.do-signame.diff
Description: Text Data