jdk/src/share/native/java/net/Inet6Address.c
changeset 22646 5fa3669fd35d
parent 21620 5f7f2b541560
child 23010 6dadb192ad81
--- a/jdk/src/share/native/java/net/Inet6Address.c	Tue Feb 04 18:37:12 2014 +0000
+++ b/jdk/src/share/native/java/net/Inet6Address.c	Tue Feb 04 23:40:23 2014 +0000
@@ -42,6 +42,8 @@
 jfieldID ia6_scopeifnameID;
 jmethodID ia6_ctrID;
 
+static int ia6_initialized = 0;
+
 /*
  * Class:     java_net_Inet6Address
  * Method:    init
@@ -49,24 +51,28 @@
  */
 JNIEXPORT void JNICALL
 Java_java_net_Inet6Address_init(JNIEnv *env, jclass cls) {
-    jclass ia6h_class;
-    jclass c = (*env)->FindClass(env, "java/net/Inet6Address");
-    CHECK_NULL(c);
-    ia6_class = (*env)->NewGlobalRef(env, c);
-    CHECK_NULL(ia6_class);
-    ia6h_class = (*env)->FindClass(env, "java/net/Inet6Address$Inet6AddressHolder");
-    CHECK_NULL(ia6h_class);
-    ia6_holder6ID = (*env)->GetFieldID(env, ia6_class, "holder6", "Ljava/net/Inet6Address$Inet6AddressHolder;");
-    CHECK_NULL(ia6_holder6ID);
-    ia6_ipaddressID = (*env)->GetFieldID(env, ia6h_class, "ipaddress", "[B");
-    CHECK_NULL(ia6_ipaddressID);
-    ia6_scopeidID = (*env)->GetFieldID(env, ia6h_class, "scope_id", "I");
-    CHECK_NULL(ia6_scopeidID);
-    ia6_cachedscopeidID = (*env)->GetFieldID(env, ia6_class, "cached_scope_id", "I");
-    CHECK_NULL(ia6_cachedscopeidID);
-    ia6_scopeidsetID = (*env)->GetFieldID(env, ia6h_class, "scope_id_set", "Z");
-    CHECK_NULL(ia6_scopeidsetID);
-    ia6_scopeifnameID = (*env)->GetFieldID(env, ia6h_class, "scope_ifname", "Ljava/net/NetworkInterface;");
-    CHECK_NULL(ia6_scopeifnameID);
-    ia6_ctrID = (*env)->GetMethodID(env, ia6_class, "<init>", "()V");
+    if (!ia6_initialized) {
+        jclass ia6h_class;
+        jclass c = (*env)->FindClass(env, "java/net/Inet6Address");
+        CHECK_NULL(c);
+        ia6_class = (*env)->NewGlobalRef(env, c);
+        CHECK_NULL(ia6_class);
+        ia6h_class = (*env)->FindClass(env, "java/net/Inet6Address$Inet6AddressHolder");
+        CHECK_NULL(ia6h_class);
+        ia6_holder6ID = (*env)->GetFieldID(env, ia6_class, "holder6", "Ljava/net/Inet6Address$Inet6AddressHolder;");
+        CHECK_NULL(ia6_holder6ID);
+        ia6_ipaddressID = (*env)->GetFieldID(env, ia6h_class, "ipaddress", "[B");
+        CHECK_NULL(ia6_ipaddressID);
+        ia6_scopeidID = (*env)->GetFieldID(env, ia6h_class, "scope_id", "I");
+        CHECK_NULL(ia6_scopeidID);
+        ia6_cachedscopeidID = (*env)->GetFieldID(env, ia6_class, "cached_scope_id", "I");
+        CHECK_NULL(ia6_cachedscopeidID);
+        ia6_scopeidsetID = (*env)->GetFieldID(env, ia6h_class, "scope_id_set", "Z");
+        CHECK_NULL(ia6_scopeidsetID);
+        ia6_scopeifnameID = (*env)->GetFieldID(env, ia6h_class, "scope_ifname", "Ljava/net/NetworkInterface;");
+        CHECK_NULL(ia6_scopeifnameID);
+        ia6_ctrID = (*env)->GetMethodID(env, ia6_class, "<init>", "()V");
+        CHECK_NULL(ia6_ctrID);
+        ia6_initialized = 1;
+    }
 }