[glib/wip/desrt/happier-eyeballs] gnetworkaddress: fix "happy eyeballs" logic
- From: Allison Karlitskaya <desrt src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib/wip/desrt/happier-eyeballs] gnetworkaddress: fix "happy eyeballs" logic
- Date: Thu, 23 May 2019 07:36:58 +0000 (UTC)
commit 38bda53e64de8a6685a2cac24a68df09a098f8fb
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.
gnetworkaddress# Your branch is up to date with 'origin/master'.
gio/gnetworkaddress.c | 7 +------
1 file changed, 1 insertion(+), 6 deletions(-)
---
diff --git a/gio/gnetworkaddress.c b/gio/gnetworkaddress.c
index 4d8d74bd4..614c033ab 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]