From: Enlightenment S. <no-...@en...> - 2012-06-07 07:23:04
|
Log: on the advice of the insightful creator of dns.c, account for when a UDP answer is truncated and the resolver switches to TCP, causing the pollfd descriptor will change. Any poll on this old descriptor will either timeout or continually poll as ready Author: discomfitor Date: 2012-06-07 00:22:53 -0700 (Thu, 07 Jun 2012) New Revision: 71776 Trac: http://trac.enlightenment.org/e/changeset/71776 Modified: trunk/ecore/src/lib/ecore_con/ecore_con_dns.c Modified: trunk/ecore/src/lib/ecore_con/ecore_con_dns.c =================================================================== --- trunk/ecore/src/lib/ecore_con/ecore_con_dns.c 2012-06-07 07:17:45 UTC (rev 71775) +++ trunk/ecore/src/lib/ecore_con/ecore_con_dns.c 2012-06-07 07:22:53 UTC (rev 71776) @@ -115,10 +115,16 @@ } static Eina_Bool -_dns_fd_cb(Ecore_Con_DNS *dns, Ecore_Fd_Handler *fdh) +_dns_fd_cb(Ecore_Con_DNS *dns, Ecore_Fd_Handler *fdh __UNUSED__) { - if (_ecore_con_dns_check(dns) == 1) - ecore_main_fd_handler_active_set(fdh, dns_ai_events(dns->ai)); + if (_ecore_con_dns_check(dns) != 1) return ECORE_CALLBACK_RENEW; + if (ecore_main_fd_handler_fd_get(dns->fdh) != dns_ai_pollfd(dns->ai)) + { + ecore_main_fd_handler_del(dns->fdh); + dns->fdh = ecore_main_fd_handler_add(dns_ai_pollfd(dns->ai), dns_ai_events(dns->ai), (Ecore_Fd_Cb)_dns_fd_cb, dns, NULL, NULL); + } + else + ecore_main_fd_handler_active_set(dns->fdh, dns_ai_events(dns->ai)); return ECORE_CALLBACK_RENEW; } |