If a class implements GAsyncInitable, and its parent also implements
it, then the subclass needs to call its parent's init_async() before
running its own. This was made more complicated by the fact that the
default init_finish() behavior was handled by the wrapper method
(which can't be used when making the super call) rather than the
default implementation itself. Fix that.
https://bugzilla.gnome.org/show_bug.cgi?id=667375
GAsyncResult *res,
GError **error)
{
- return TRUE; /* Errors handled by base impl */
+ /* Although g_async_initable_init_finish() does this error handling
+ * as well, we do it here too, so that a class that reimplements
+ * GAsyncInitable can properly run its parent class's implementation
+ * by directly invoking its ->init_async() and ->init_finish().
+ */
+ if (G_IS_SIMPLE_ASYNC_RESULT (res))
+ {
+ GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
+ if (g_simple_async_result_propagate_error (simple, error))
+ return FALSE;
+ }
+
+ return TRUE;
}
/**