mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-02-03 01:36:17 +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,
|
||||
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…
Reference in New Issue
Block a user