mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-02-09 04:15:49 +01:00
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:
parent
feb120eb40
commit
afe7a2d136
@ -294,7 +294,19 @@ g_async_initable_real_init_finish (GAsyncInitable *initable,
|
|||||||
GAsyncResult *res,
|
GAsyncResult *res,
|
||||||
GError **error)
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user