diff options
author | Ryan Lortie <desrt@desrt.ca> | 2014-02-13 16:34:29 -0500 |
---|---|---|
committer | Ryan Lortie <desrt@desrt.ca> | 2014-02-15 16:57:12 -0500 |
commit | 8c4dc84173190bd10e1a2de77524869b3da672e5 (patch) | |
tree | 9b7ceca96299fbf151e7295c523bc166b4a6f8e7 | |
parent | 1515f9ad92ed62d2c9d790c7020ff248c8dd6730 (diff) | |
download | glib-8c4dc84173190bd10e1a2de77524869b3da672e5.tar.gz |
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.
-rw-r--r-- | gio/gsocket.c | 22 |
1 files changed, 7 insertions, 15 deletions
diff --git a/gio/gsocket.c b/gio/gsocket.c index 341686cdc..bbc1b5713 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 |