[glib/wip/gmaincontext: 5/12] gsocket: use cancellable child source



commit 8c4dc84173190bd10e1a2de77524869b3da672e5
Author: Ryan Lortie <desrt desrt ca>
Date:   Thu Feb 13 16:34:29 2014 -0500

    gsocket: use cancellable child source
    
    Now that GCancellable's GSource is based on _set_ready_time() instead of
    an fd, we should use it as a child source, instead of forcing the
    creation of the fd and adding it as a poll.

 gio/gsocket.c |   22 +++++++---------------
 1 files changed, 7 insertions(+), 15 deletions(-)
---
diff --git a/gio/gsocket.c b/gio/gsocket.c
index 341686c..bbc1b57 100644
--- a/gio/gsocket.c
+++ b/gio/gsocket.c
@@ -3207,8 +3207,6 @@ typedef struct {
   GPollFD       pollfd;
   GSocket      *socket;
   GIOCondition  condition;
-  GCancellable *cancellable;
-  GPollFD       cancel_pollfd;
   gint64        timeout_time;
 } GSocketSource;
 
@@ -3218,9 +3216,6 @@ socket_source_prepare (GSource *source,
 {
   GSocketSource *socket_source = (GSocketSource *)source;
 
-  if (g_cancellable_is_cancelled (socket_source->cancellable))
-    return TRUE;
-
   if (socket_source->timeout_time)
     {
       gint64 now;
@@ -3299,12 +3294,6 @@ socket_source_finalize (GSource *source)
 #endif
 
   g_object_unref (socket);
-
-  if (socket_source->cancellable)
-    {
-      g_cancellable_release_fd (socket_source->cancellable);
-      g_object_unref (socket_source->cancellable);
-    }
 }
 
 static gboolean
@@ -3371,11 +3360,14 @@ socket_source_new (GSocket      *socket,
   socket_source->socket = g_object_ref (socket);
   socket_source->condition = condition;
 
-  if (g_cancellable_make_pollfd (cancellable,
-                                 &socket_source->cancel_pollfd))
+  if (cancellable)
     {
-      socket_source->cancellable = g_object_ref (cancellable);
-      g_source_add_poll (source, &socket_source->cancel_pollfd);
+      GSource *cancellable_source;
+
+      cancellable_source = g_cancellable_source_new (cancellable);
+      g_source_add_child_source (source, cancellable_source);
+      g_source_set_dummy_callback (cancellable_source);
+      g_source_unref (cancellable_source);
     }
 
 #ifdef G_OS_WIN32


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]