#include "gsimpleasyncresult.h"
#include "gsocketaddress.h"
-#include "gioalias.h"
G_DEFINE_TYPE (GWin32Resolver, g_win32_resolver, G_TYPE_THREADED_RESOLVER)
HANDLE *event;
GSimpleAsyncResult *async_result;
gboolean complete;
- guint cancelled_idle;
+ GSource *cancelled_idle;
union {
struct {
/* 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)
{
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);
/* 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
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"