components/ntp/patches/85-getif-eintr.patch
author Brian Utterback <brian.utterback@oracle.com>
Tue, 15 Jul 2014 07:20:42 -0700
changeset 2003 81f9a60cccb1
permissions -rw-r--r--
18287627 ntpd sometimes logs unexpected getifaddrs errors
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2003
81f9a60cccb1 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
     1
If getifaddrs blocks on a lock and a SIGALRM happens to fire while it
81f9a60cccb1 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
     2
is block, it will return with EINTR. WE need to detect that and just
81f9a60cccb1 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
     3
try again.
81f9a60cccb1 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
     4
81f9a60cccb1 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
     5
This is NTP bug 2565. Remove this patch when upgrading to a version that
81f9a60cccb1 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
     6
has bug 2565 fixed in it.
81f9a60cccb1 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
     7
81f9a60cccb1 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
     8
--- lib/isc/unix/ifiter_getifaddrs.c
81f9a60cccb1 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
     9
+++ lib/isc/unix/ifiter_getifaddrs.c
81f9a60cccb1 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    10
@@ -55,6 +55,8 @@ isc_interfaceiter_create(isc_mem_t *mctx
81f9a60cccb1 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    11
 	isc_interfaceiter_t *iter;
81f9a60cccb1 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    12
 	isc_result_t result;
81f9a60cccb1 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    13
 	char strbuf[ISC_STRERRORSIZE];
81f9a60cccb1 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    14
+	int trys;
81f9a60cccb1 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    15
+	int ret;
81f9a60cccb1 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    16
 
81f9a60cccb1 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    17
 	REQUIRE(mctx != NULL);
81f9a60cccb1 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    18
 	REQUIRE(iterp != NULL);
81f9a60cccb1 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    19
@@ -86,15 +88,21 @@ isc_interfaceiter_create(isc_mem_t *mctx
81f9a60cccb1 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    20
 	iter->valid = ISC_R_FAILURE;
81f9a60cccb1 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    21
 #endif
81f9a60cccb1 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    22
 
81f9a60cccb1 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    23
-	if (getifaddrs(&iter->ifaddrs) < 0) {
81f9a60cccb1 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    24
+	for (trys = 0; trys < 3; trys++) {
81f9a60cccb1 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    25
+		if ((ret = getifaddrs(&iter->ifaddrs)) >= 0)
81f9a60cccb1 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    26
+			break;
81f9a60cccb1 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    27
+		if (errno != EINTR) 
81f9a60cccb1 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    28
+			break;
81f9a60cccb1 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    29
+	}
81f9a60cccb1 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    30
+	if (ret < 0) {
81f9a60cccb1 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    31
 		isc__strerror(errno, strbuf, sizeof(strbuf));
81f9a60cccb1 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    32
 		UNEXPECTED_ERROR(__FILE__, __LINE__,
81f9a60cccb1 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    33
-				 isc_msgcat_get(isc_msgcat,
81f9a60cccb1 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    34
-						ISC_MSGSET_IFITERGETIFADDRS,
81f9a60cccb1 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    35
-						ISC_MSG_GETIFADDRS,
81f9a60cccb1 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    36
-						"getting interface "
81f9a60cccb1 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    37
-						"addresses: getifaddrs: %s"),
81f9a60cccb1 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    38
-				 strbuf);
81f9a60cccb1 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    39
+		    isc_msgcat_get(isc_msgcat,
81f9a60cccb1 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    40
+		    ISC_MSGSET_IFITERGETIFADDRS,
81f9a60cccb1 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    41
+		    ISC_MSG_GETIFADDRS,
81f9a60cccb1 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    42
+		    "getting interface "
81f9a60cccb1 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    43
+		    "addresses: getifaddrs: %s"),
81f9a60cccb1 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    44
+		    strbuf);
81f9a60cccb1 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    45
 		result = ISC_R_UNEXPECTED;
81f9a60cccb1 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    46
 		goto failure;
81f9a60cccb1 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    47
 	}