Skip to content
  • Dan Winship's avatar
    GSimpleAsyncResult: push thread context around callback · df45856b
    Dan Winship authored
    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
    df45856b