]> git.ipfire.org Git - thirdparty/ntp.git/commitdiff
[Bug 2565] ntpd sometimes logs unexpected getifaddrs() errors
authorHarlan Stenn <stenn@ntp.org>
Sun, 3 Aug 2014 05:03:03 +0000 (05:03 +0000)
committerHarlan Stenn <stenn@ntp.org>
Sun, 3 Aug 2014 05:03:03 +0000 (05:03 +0000)
bk: 53ddc287t6wG8JiPTwQkXs5LOahDZQ

ChangeLog
lib/isc/unix/ifiter_getifaddrs.c

index e7fd78e14d83bbf5f0131a0a1333be4dc064853e..310d9d0e82f1d23986f5e9fecc38d5f71db56c88 100644 (file)
--- 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 <stenn@ntp.org>
 * [Bug 2628] 'mon_getmoremem()' relies on undefined behaviour
index a15d21f500c08aa811c9c66e28724ba03972813f..547a83f0793772222baa3d531b3a9a993506cd24 100644 (file)
@@ -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;
        }
 
        /*