components/ntp/patches/85-getif-eintr.patch
author Brian Utterback <brian.utterback@oracle.com>
Tue, 15 Jul 2014 07:20:42 -0700
branchs11-update
changeset 3213 751af0142dff
permissions -rw-r--r--
18287627 ntpd sometimes logs unexpected getifaddrs errors
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3213
751af0142dff 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
751af0142dff 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
751af0142dff 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
     3
try again.
751af0142dff 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
     4
751af0142dff 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
751af0142dff 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
     6
has bug 2565 fixed in it.
751af0142dff 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
     7
751af0142dff 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
     8
--- lib/isc/unix/ifiter_getifaddrs.c
751af0142dff 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
     9
+++ lib/isc/unix/ifiter_getifaddrs.c
751af0142dff 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
751af0142dff 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    11
 	isc_interfaceiter_t *iter;
751af0142dff 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    12
 	isc_result_t result;
751af0142dff 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    13
 	char strbuf[ISC_STRERRORSIZE];
751af0142dff 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    14
+	int trys;
751af0142dff 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    15
+	int ret;
751af0142dff 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    16
 
751af0142dff 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    17
 	REQUIRE(mctx != NULL);
751af0142dff 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    18
 	REQUIRE(iterp != NULL);
751af0142dff 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
751af0142dff 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    20
 	iter->valid = ISC_R_FAILURE;
751af0142dff 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    21
 #endif
751af0142dff 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    22
 
751af0142dff 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    23
-	if (getifaddrs(&iter->ifaddrs) < 0) {
751af0142dff 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    24
+	for (trys = 0; trys < 3; trys++) {
751af0142dff 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    25
+		if ((ret = getifaddrs(&iter->ifaddrs)) >= 0)
751af0142dff 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    26
+			break;
751af0142dff 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    27
+		if (errno != EINTR) 
751af0142dff 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    28
+			break;
751af0142dff 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    29
+	}
751af0142dff 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    30
+	if (ret < 0) {
751af0142dff 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    31
 		isc__strerror(errno, strbuf, sizeof(strbuf));
751af0142dff 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    32
 		UNEXPECTED_ERROR(__FILE__, __LINE__,
751af0142dff 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    33
-				 isc_msgcat_get(isc_msgcat,
751af0142dff 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    34
-						ISC_MSGSET_IFITERGETIFADDRS,
751af0142dff 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    35
-						ISC_MSG_GETIFADDRS,
751af0142dff 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    36
-						"getting interface "
751af0142dff 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    37
-						"addresses: getifaddrs: %s"),
751af0142dff 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    38
-				 strbuf);
751af0142dff 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    39
+		    isc_msgcat_get(isc_msgcat,
751af0142dff 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    40
+		    ISC_MSGSET_IFITERGETIFADDRS,
751af0142dff 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    41
+		    ISC_MSG_GETIFADDRS,
751af0142dff 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    42
+		    "getting interface "
751af0142dff 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    43
+		    "addresses: getifaddrs: %s"),
751af0142dff 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    44
+		    strbuf);
751af0142dff 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    45
 		result = ISC_R_UNEXPECTED;
751af0142dff 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    46
 		goto failure;
751af0142dff 18287627 ntpd sometimes logs unexpected getifaddrs errors
Brian Utterback <brian.utterback@oracle.com>
parents:
diff changeset
    47
 	}