--- 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;
