Merge remote branch 'gvdb/master'
[platform/upstream/glib.git] / gio / gwin32resolver.c
index cab45cc..1dd2aad 100644 (file)
@@ -34,7 +34,6 @@
 #include "gsimpleasyncresult.h"
 #include "gsocketaddress.h"
 
-#include "gioalias.h"
 
 G_DEFINE_TYPE (GWin32Resolver, g_win32_resolver, G_TYPE_THREADED_RESOLVER)
 
@@ -95,7 +94,7 @@ struct GWin32ResolverRequest {
   HANDLE *event;
   GSimpleAsyncResult *async_result;
   gboolean complete;
-  guint cancelled_idle;
+  GSource *cancelled_idle;
 
   union {
     struct {
@@ -167,8 +166,9 @@ request_completed (gpointer user_data)
   /* Clean up cancellation-related stuff first */
   if (req->cancelled_idle)
     {
-      g_source_remove (req->cancelled_idle);
-      req->cancelled_idle = 0;
+      g_source_destroy (req->cancelled_idle);
+      g_source_unref (req->cancelled_idle);
+      req->cancelled_idle = NULL;
     }
   if (req->cancellable)
     {
@@ -197,7 +197,8 @@ request_cancelled_idle (gpointer user_data)
   GWin32ResolverRequest *req = user_data;
   GError *error = NULL;
 
-  req->cancelled_idle = 0;
+  g_source_unref (req->cancelled_idle);
+  req->cancelled_idle = NULL;
 
   g_cancellable_set_error_if_cancelled (req->cancellable, &error);
   g_simple_async_result_set_from_error (req->async_result, error);
@@ -226,9 +227,13 @@ request_cancelled (GCancellable *cancellable,
 
   /* We need to wait until main-loop-time to actually complete the
    * result; we don't use _complete_in_idle() here because we need to
-   * keep track of the source id.
+   * keep track of the source so we can potentially cancel it before
+   * it runs.
    */
-  req->cancelled_idle = g_idle_add (request_cancelled_idle, req);
+  req->cancelled_idle = g_idle_source_new ();
+  g_source_set_callback (req->cancelled_idle,
+                         (GSourceFunc)request_cancelled_idle, req, NULL);
+  g_source_attach (req->cancelled_idle, g_main_context_get_thread_default ());
 }
 
 static DWORD WINAPI
@@ -473,9 +478,6 @@ g_win32_handle_source_add (HANDLE      handle,
   g_source_add_poll (source, &hsource->pollfd);
 
   g_source_set_callback (source, callback, user_data, NULL);
-  g_source_attach (source, NULL);
+  g_source_attach (source, g_main_context_get_thread_default ());
   return source;
 }
-
-#define __G_WIN32_RESOLVER_C__
-#include "gioaliasdef.c"