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