diff options
Diffstat (limited to 'runtime/net.c')
-rw-r--r-- | runtime/net.c | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/runtime/net.c b/runtime/net.c index b9af700c..38b41389 100644 --- a/runtime/net.c +++ b/runtime/net.c @@ -695,6 +695,25 @@ finalize_it: } + +/* This is a synchronized getnameinfo() version, because we learned + * (via drd/valgrind) that getnameinfo() seems to have some multi-threading + * issues. -- rgerhards, 2008-09-30 + */ +static int +mygetnameinfo(const struct sockaddr *sa, socklen_t salen, + char *host, size_t hostlen, + char *serv, size_t servlen, int flags) +{ + int iCancelStateSave; + int i; + + pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &iCancelStateSave); + i = getnameinfo(sa, salen, host, hostlen, serv, servlen, flags); + pthread_setcancelstate(iCancelStateSave, NULL); + return i; +} + /* Print an allowed sender list. The caller must tell us which one. * iListToPrint = 1 means UDP, 2 means TCP * rgerhards, 2005-09-27 @@ -977,7 +996,6 @@ should_use_so_bsdcompat(void) #define SO_BSDCOMPAT 0 #endif - /* get the hostname of the message source. This was originally in cvthname() * but has been moved out of it because of clarity and fuctional separation. * It must be provided by the socket we received the message on as well as |