summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
authordduvall <none@none>2005-10-31 15:29:53 -0800
committerdduvall <none@none>2005-10-31 15:29:53 -0800
commit522caefd66f4664db43a7b0008a469b547aea942 (patch)
tree95995c09c95f6713b4db9b6bfec7db339235ce06 /usr/src
parentebf3afa8e82eb30c81bf5c19510ef97a2c50a82f (diff)
downloadillumos-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.c26
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