gio: specify proper c_marshaller and va_marshallers
This is related to #1532 (closed)
If a c_marshaller
is specified to g_signal_new()
, no va_marshaller
will be automatically applied, even if we have an internal marshaller which could be used for the closure. However, if c_marshaller
is set to NULL
for the simple cases, a va_marshaller
will be automatically applied.
Further more, by ensuring we have proper marshallers for all objects within Gio, we allow application developers to get proper stack traces from profiler tooling such as Linux's perf (which does stack unwinding from kernel-space). Going through the ffi_call_unix64
frame on x86_64 causes stack traces to be cut short.
There might be a small performance improvement as well, but it's likely negligible at best.