[glib/backport-865-happier-eyeballs-glib-2-60: 1/2] gnetworkaddress: fix "happy eyeballs" logic



commit 2b6a3c110d7668f6c037ed6b713b90a74d032b92
Author: Allison Karlitskaya <allison karlitskaya redhat com>
Date:   Thu May 23 09:33:00 2019 +0200

    gnetworkaddress: fix "happy eyeballs" logic
    
    The "happy eyeballs" RFC states that on receiving a negative response
    for an IPv6 address lookup, we should wait for the IPv4 lookup to
    complete and use any results we get from there.
    
    The current code was not doing that: it was rather setting a timeout for
    failing the resolution entirely.  In scenarios where the IPv4 response
    comes more than 50ms after the IPv6 response (which is easily attainable
    under valgrind in certain configurations) this means that the IPv4
    response will never come.
    
    Remove the timeout and just wait.
    
    See merge request GNOME/glib!865

 gio/gnetworkaddress.c | 7 +------
 1 file changed, 1 insertion(+), 6 deletions(-)
---
diff --git a/gio/gnetworkaddress.c b/gio/gnetworkaddress.c
index 72803903d..e46b5ac65 100644
--- a/gio/gnetworkaddress.c
+++ b/gio/gnetworkaddress.c
@@ -1261,13 +1261,8 @@ got_ipv6_addresses (GObject      *source_object,
    */
   if (error != NULL && !addr_enum->last_error && (addr_enum->state & RESOLVE_STATE_WAITING_ON_IPV4))
     {
+      /* ipv6 lookup failed, but ipv4 is still outstanding.  wait. */
       addr_enum->last_error = g_steal_pointer (&error);
-
-      addr_enum->wait_source = g_timeout_source_new (HAPPY_EYEBALLS_RESOLUTION_DELAY_MS);
-      g_source_set_callback (addr_enum->wait_source,
-                             on_address_timeout,
-                             addr_enum, NULL);
-      g_source_attach (addr_enum->wait_source, addr_enum->context);
     }
   else if (addr_enum->waiting_task != NULL)
     {


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