GAsyncInitable: fix subclassibility

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
This commit is contained in:
Dan Winship 2012-01-05 13:04:37 -05:00
parent feb120eb40
commit afe7a2d136

View File

@ -294,7 +294,19 @@ g_async_initable_real_init_finish (GAsyncInitable *initable,
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;
}
/**