< prev index next >
src/hotspot/share/prims/jni.cpp
Print this page
@@ -751,11 +751,11 @@
JNIWrapper("NewGlobalRef");
HOTSPOT_JNI_NEWGLOBALREF_ENTRY(env, ref);
Handle ref_handle(thread, JNIHandles::resolve(ref));
- jobject ret = JNIHandles::make_global(ref_handle);
+ jobject ret = JNIHandles::make_global(ref_handle, AllocFailStrategy::RETURN_NULL);
HOTSPOT_JNI_NEWGLOBALREF_RETURN(ret);
return ret;
JNI_END
@@ -795,11 +795,12 @@
JNI_ENTRY(jobject, jni_NewLocalRef(JNIEnv *env, jobject ref))
JNIWrapper("NewLocalRef");
HOTSPOT_JNI_NEWLOCALREF_ENTRY(env, ref);
- jobject ret = JNIHandles::make_local(THREAD, JNIHandles::resolve(ref));
+ jobject ret = JNIHandles::make_local(THREAD, JNIHandles::resolve(ref),
+ AllocFailStrategy::RETURN_NULL);
HOTSPOT_JNI_NEWLOCALREF_RETURN(ret);
return ret;
JNI_END
@@ -3048,11 +3049,14 @@
JNI_ENTRY(jweak, jni_NewWeakGlobalRef(JNIEnv *env, jobject ref))
JNIWrapper("jni_NewWeakGlobalRef");
HOTSPOT_JNI_NEWWEAKGLOBALREF_ENTRY(env, ref);
Handle ref_handle(thread, JNIHandles::resolve(ref));
- jweak ret = JNIHandles::make_weak_global(ref_handle);
+ jweak ret = JNIHandles::make_weak_global(ref_handle, AllocFailStrategy::RETURN_NULL);
+ if (ret == NULL) {
+ THROW_OOP_(Universe::out_of_memory_error_c_heap(), NULL);
+ }
HOTSPOT_JNI_NEWWEAKGLOBALREF_RETURN(ret);
return ret;
JNI_END
// Must be JNI_ENTRY (with HandleMark)
@@ -3125,10 +3129,16 @@
// Make global references for these
bufferClass = (jclass) env->NewGlobalRef(bufferClass);
directBufferClass = (jclass) env->NewGlobalRef(directBufferClass);
directByteBufferClass = (jclass) env->NewGlobalRef(directByteBufferClass);
+ // Global refs will be NULL if out-of-memory (no exception is pending)
+ if (bufferClass == NULL || directBufferClass == NULL || directByteBufferClass == NULL) {
+ directBufferSupportInitializeFailed = 1;
+ return false;
+ }
+
// Get needed field and method IDs
directByteBufferConstructor = env->GetMethodID(directByteBufferClass, "<init>", "(JI)V");
if (env->ExceptionCheck()) {
env->ExceptionClear();
directBufferSupportInitializeFailed = 1;
< prev index next >