diff options
author | dduvall <none@none> | 2005-10-31 15:29:53 -0800 |
---|---|---|
committer | dduvall <none@none> | 2005-10-31 15:29:53 -0800 |
commit | 522caefd66f4664db43a7b0008a469b547aea942 (patch) | |
tree | 95995c09c95f6713b4db9b6bfec7db339235ce06 /usr/src | |
parent | ebf3afa8e82eb30c81bf5c19510ef97a2c50a82f (diff) | |
download | illumos-gate-522caefd66f4664db43a7b0008a469b547aea942.tar.gz |
backout 6248700: causes various core dumps (6337595,6340650,6335902)
Diffstat (limited to 'usr/src')
-rw-r--r-- | usr/src/lib/libresolv2/common/resolv/res_init.c | 26 |
1 files changed, 10 insertions, 16 deletions
diff --git a/usr/src/lib/libresolv2/common/resolv/res_init.c b/usr/src/lib/libresolv2/common/resolv/res_init.c index f2a3ab172c..06b35591b1 100644 --- a/usr/src/lib/libresolv2/common/resolv/res_init.c +++ b/usr/src/lib/libresolv2/common/resolv/res_init.c @@ -194,9 +194,6 @@ __res_vinit(res_state statp, int preinit) { int dots; union res_sockaddr_union u[2]; - if (statp->_u._ext.ext != NULL) - res_ndestroy(statp); - if (!preinit) { statp->retrans = RES_TIMEOUT; statp->retry = RES_DFLRETRY; @@ -204,6 +201,9 @@ __res_vinit(res_state statp, int preinit) { statp->id = res_randomid(); } + if ((statp->options & RES_INIT) != 0) + res_ndestroy(statp); + memset(u, 0, sizeof(u)); #ifdef USELOOPBACK u[nserv].sin.sin_addr = inet_makeaddr(IN_LOOPBACKNET, 1); @@ -264,13 +264,13 @@ __res_vinit(res_state statp, int preinit) { if ((s = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { perror("res_init: socket"); - goto freedata; + return (-1); } lifn.lifn_family = AF_UNSPEC; lifn.lifn_flags = LIFC_EXTERNAL_SOURCE; if (ioctl(s, SIOCGLIFNUM, (char *)&lifn) < 0) { close(s); - goto freedata; + return (-1); } if (lifn.lifn_count == 0) { /* @@ -284,14 +284,14 @@ __res_vinit(res_state statp, int preinit) { if ((ioctl(s, SIOCGLIFNUM, (char *)&lifn) < 0) || (lifn.lifn_count < 1)) { close(s); - goto freedata; + return (-1); } buflen = lifn.lifn_count * sizeof (struct lifreq); buf = (uchar_t *)malloc(buflen); if (buf == NULL) { close(s); - goto freedata; + return (-1); } lifc.lifc_family = AF_UNSPEC; @@ -301,7 +301,7 @@ __res_vinit(res_state statp, int preinit) { if (ioctl(s, SIOCGLIFCONF, (char *)&lifc) < 0) { close(s); free(buf); - goto freedata; + return (-1); } for (i = 0; i < lifn.lifn_count; ++i) { @@ -313,7 +313,7 @@ __res_vinit(res_state statp, int preinit) { if (ioctl(s, SIOCGLIFFLAGS, &lreq) < 0) { close(s); free(buf); - goto freedata; + return (-1); } if ((lreq.lifr_flags & IFF_UP) && !(lreq.lifr_flags & IFF_NOLOCAL) && @@ -327,7 +327,7 @@ __res_vinit(res_state statp, int preinit) { if (!int_up) { close(s); - goto freedata; + return (-1); } } close(s); @@ -604,12 +604,6 @@ __res_vinit(res_state statp, int preinit) { res_setoptions(statp, cp, "env"); statp->options |= RES_INIT; return (0); -freedata: - if (statp->_u._ext.ext != NULL) { - free(statp->_u._ext.ext); - statp->_u._ext.ext = NULL; - } - return (-1); } static void |