mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-11-09 19:06:15 +01:00
GSimpleAsyncResult: push thread context around callback
When an old pre-thread-default-context API that takes an explicit GMainContext wants to call a gio API, it must call g_main_context_push_thread_default() before, and g_main_context_pop_thread_default() after the gio call, so that the gio method will return its result to the desired GMainContext. But this fails for methods like g_socket_client_connect_async() that make a chain of multiple async calls, since the pushed/popped context will only affect the initial call. Fix this by having GSimpleAsyncResult itself push/pop the context around the callback invocation, so that if the callback queues another async request, it will stay in the same context as the original one. https://bugzilla.gnome.org/show_bug.cgi?id=646957
This commit is contained in:
parent
b27f2e051e
commit
df45856bba
@ -744,9 +744,13 @@ g_simple_async_result_complete (GSimpleAsyncResult *simple)
|
||||
#endif
|
||||
|
||||
if (simple->callback)
|
||||
simple->callback (simple->source_object,
|
||||
G_ASYNC_RESULT (simple),
|
||||
simple->user_data);
|
||||
{
|
||||
g_main_context_push_thread_default (simple->context);
|
||||
simple->callback (simple->source_object,
|
||||
G_ASYNC_RESULT (simple),
|
||||
simple->user_data);
|
||||
g_main_context_pop_thread_default (simple->context);
|
||||
}
|
||||
}
|
||||
|
||||
static gboolean
|
||||
|
Loading…
Reference in New Issue
Block a user