--- openjdk/jdk/src/solaris/native/java/net/net_util_md.c.orig
+++ openjdk/jdk/src/solaris/native/java/net/net_util_md.c
@@ -561,7 +561,7 @@
static struct localinterface *localifs = 0;
static int localifsSize = 0; /* size of array */
-static int nifs = 0; /* number of entries used in array */
+static int nifs = -1; /* number of entries used in array */
/* not thread safe: make sure called once from one thread */
@@ -573,6 +573,10 @@
int index, x1, x2, x3;
unsigned int u0,u1,u2,u3,u4,u5,u6,u7,u8,u9,ua,ub,uc,ud,ue,uf;
+ if (nifs >= 0)
+ return ;
+ nifs = 0;
+
if ((f = fopen("/proc/net/if_inet6", "r")) == NULL) {
return ;
}
@@ -601,7 +605,7 @@
localifs = (struct localinterface *) realloc (
localifs, sizeof (struct localinterface)* (localifsSize+5));
if (localifs == 0) {
- nifs = 0;
+ nifs = -1;
fclose (f);
return;
}
@@ -624,9 +628,7 @@
static int getLocalScopeID (char *addr) {
struct localinterface *lif;
int i;
- if (localifs == 0) {
- initLocalIfs();
- }
+ initLocalIfs();
for (i=0, lif=localifs; i<nifs; i++, lif++) {
if (memcmp (addr, lif->localaddr, 16) == 0) {
return lif->index;