@@ -504,6 +504,7 @@ void *thread_dns_hostbyip(void *arg)
504
504
505
505
i = getnameinfo ((const struct sockaddr * ) & addr -> addr .sa , addr -> addrlen ,
506
506
dtn -> host , sizeof dtn -> host , NULL , 0 , 0 );
507
+ pthread_mutex_lock (& dtn -> mutex );
507
508
if (!i )
508
509
* dtn -> strerror = 0 ;
509
510
else {
@@ -515,7 +516,6 @@ void *thread_dns_hostbyip(void *arg)
515
516
#endif
516
517
inet_ntop (AF_INET , & addr -> addr .s4 .sin_addr .s_addr , dtn -> host , sizeof dtn -> host );
517
518
}
518
- pthread_mutex_lock (& dtn -> mutex );
519
519
close (dtn -> fildes [1 ]);
520
520
pthread_mutex_unlock (& dtn -> mutex );
521
521
return NULL ;
@@ -530,6 +530,7 @@ void *thread_dns_ipbyhost(void *arg)
530
530
531
531
error = getaddrinfo (dtn -> host , NULL , NULL , & res0 );
532
532
memset (addr , 0 , sizeof * addr );
533
+ pthread_mutex_lock (& dtn -> mutex );
533
534
if (!error ) {
534
535
* dtn -> strerror = 0 ;
535
536
#ifdef IPV6
@@ -563,11 +564,13 @@ void *thread_dns_ipbyhost(void *arg)
563
564
}
564
565
else if (error == EAI_NONAME )
565
566
snprintf (dtn -> strerror , sizeof dtn -> strerror , "dns: thread_dns_ipbyhost(): getaddrinfo(): not known" );
566
- else if (error == EAI_SYSTEM )
567
- snprintf (dtn -> strerror , sizeof dtn -> strerror , "dns: thread_dns_ipbyhost(): getaddrinfo(): %s: %s" , gai_strerror (error ), strerror (errno ));
568
- else
567
+ else if (error == EAI_SYSTEM ) {
568
+ char ebuf [2048 ];
569
+ if (strerror_r (errno , ebuf , sizeof ebuf ))
570
+ strcpy (ebuf , "strerror_r()" );
571
+ snprintf (dtn -> strerror , sizeof dtn -> strerror , "dns: thread_dns_ipbyhost(): getaddrinfo(): %s: %s" , gai_strerror (error ), ebuf );
572
+ } else
569
573
snprintf (dtn -> strerror , sizeof dtn -> strerror , "dns: thread_dns_ipbyhost(): getaddrinfo(): %s" , gai_strerror (error ));
570
- pthread_mutex_lock (& dtn -> mutex );
571
574
close (dtn -> fildes [1 ]);
572
575
pthread_mutex_unlock (& dtn -> mutex );
573
576
return NULL ;
0 commit comments