summary refs log tree commit diff
path: root/resolv/res_init.c
diff options
context:
space:
mode:
Diffstat (limited to 'resolv/res_init.c')
-rw-r--r--resolv/res_init.c36
1 files changed, 17 insertions, 19 deletions
diff --git a/resolv/res_init.c b/resolv/res_init.c
index b5a03d1883..731c784e17 100644
--- a/resolv/res_init.c
+++ b/resolv/res_init.c
@@ -537,7 +537,10 @@ net_mask(in)		/* XXX - should really use system's version of this */
 
 u_int
 res_randomid(void) {
-	return 0xffff & __getpid();
+	struct timeval now;
+
+	__gettimeofday(&now, NULL);
+	return (0xffff & (now.tv_sec ^ now.tv_usec ^ __getpid()));
 }
 #ifdef _LIBC
 libc_hidden_def (__res_randomid)
@@ -552,7 +555,7 @@ libc_hidden_def (__res_randomid)
  * This routine is not expected to be user visible.
  */
 void
-__res_iclose(res_state statp, bool free_addr) {
+res_nclose(res_state statp) {
 	int ns;
 
 	if (statp->_vcsock >= 0) {
@@ -565,25 +568,13 @@ __res_iclose(res_state statp, bool free_addr) {
 #else
 	for (ns = 0; ns < statp->_u._ext.nscount; ns++)
 #endif
-		if (statp->_u._ext.nsaddrs[ns]) {
-			if (statp->_u._ext.nssocks[ns] != -1) {
-				close_not_cancel_no_status(statp->_u._ext.nssocks[ns]);
-				statp->_u._ext.nssocks[ns] = -1;
-			}
-			if (free_addr) {
-				free (statp->_u._ext.nsaddrs[ns]);
-				statp->_u._ext.nsaddrs[ns] = NULL;
-			}
+		if (statp->_u._ext.nsaddrs[ns]
+		    && statp->_u._ext.nssocks[ns] != -1) {
+			close_not_cancel_no_status(statp->_u._ext.nssocks[ns]);
+			statp->_u._ext.nssocks[ns] = -1;
 		}
 	statp->_u._ext.nsinit = 0;
 }
-libc_hidden_def (__res_iclose)
-
-void
-res_nclose(res_state statp)
-{
-  __res_iclose (statp, true);
-}
 #ifdef _LIBC
 libc_hidden_def (__res_nclose)
 #endif
@@ -598,7 +589,14 @@ res_thread_freeres (void)
     /* Never called res_ninit.  */
     return;
 
-  __res_iclose (&_res, true);		/* Close any VC sockets.  */
+  __res_nclose (&_res);		/* Close any VC sockets.  */
+
+  for (int ns = 0; ns < MAXNS; ns++)
+    if (_res._u._ext.nsaddrs[ns] != NULL)
+      {
+	free (_res._u._ext.nsaddrs[ns]);
+	_res._u._ext.nsaddrs[ns] = NULL;
+      }
 
   /* Make sure we do a full re-initialization the next time.  */
   _res.options = 0;