From: Harlan Stenn Date: Sun, 3 Aug 2014 05:03:03 +0000 (+0000) Subject: [Bug 2565] ntpd sometimes logs unexpected getifaddrs() errors X-Git-Tag: NTP_4_2_7P455~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e6229a82d3a5f3e97c73f0cc8386ad6827114bb7;p=thirdparty%2Fntp.git [Bug 2565] ntpd sometimes logs unexpected getifaddrs() errors bk: 53ddc287t6wG8JiPTwQkXs5LOahDZQ --- diff --git a/ChangeLog b/ChangeLog index e7fd78e14..310d9d0e8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,4 @@ +* [Bug 2565] ntpd sometimes logs unexpected getifaddrs() errors. * CID 739722: Clean up the definition of the exten field of struct pkt. (4.2.7p454) 2014/07/30 Released by Harlan Stenn * [Bug 2628] 'mon_getmoremem()' relies on undefined behaviour diff --git a/lib/isc/unix/ifiter_getifaddrs.c b/lib/isc/unix/ifiter_getifaddrs.c index a15d21f50..547a83f07 100644 --- a/lib/isc/unix/ifiter_getifaddrs.c +++ b/lib/isc/unix/ifiter_getifaddrs.c @@ -55,7 +55,7 @@ isc_interfaceiter_create(isc_mem_t *mctx, isc_interfaceiter_t **iterp) { isc_interfaceiter_t *iter; isc_result_t result; char strbuf[ISC_STRERRORSIZE]; - int trys; + int trys, ret; REQUIRE(mctx != NULL); REQUIRE(iterp != NULL); @@ -87,23 +87,20 @@ isc_interfaceiter_create(isc_mem_t *mctx, isc_interfaceiter_t **iterp) { iter->valid = ISC_R_FAILURE; #endif + /* If interrupted, try again */ for (trys = 0; trys < 3; trys++) { - if (getifaddrs(&iter->ifaddrs) < 0) { - if (errno == EINTR) - continue; - - isc__strerror(errno, strbuf, sizeof(strbuf)); - UNEXPECTED_ERROR(__FILE__, __LINE__, - isc_msgcat_get(isc_msgcat, - ISC_MSGSET_IFITERGETIFADDRS, - ISC_MSG_GETIFADDRS, - "getting interface " - "addresses: getifaddrs: %s"), - strbuf); - result = ISC_R_UNEXPECTED; - goto failure; - } - break; + if ((ret = getifaddrs(&iter->ifaddrs)) >= 0) + break; + if (errno != EINTR) + break; + } + if (ret < 0) { + isc__strerror(errno, strbuf, sizeof(strbuf)); + UNEXPECTED_ERROR(__FILE__, __LINE__, isc_msgcat_get(isc_msgcat, + ISC_MSGSET_IFITERGETIFADDRS, ISC_MSG_GETIFADDRS, + "getting interface addresses: getifaddrs: %s"), strbuf); + result = ISC_R_UNEXPECTED; + goto failure; } /*