43 lines
1.3 KiB
Diff
43 lines
1.3 KiB
Diff
--- 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;
|