Mercurial > hg > graal-jvmci-8
comparison src/share/vm/runtime/os.cpp @ 242:d95b224e9f17
6721093: -XX:AppendRatio=N not supported
Summary: Add mechanism to ignore unsupported flags for a set period of time
Reviewed-by: acorn, never, coleenp
author | kamg |
---|---|
date | Mon, 28 Jul 2008 14:07:44 -0400 |
parents | 1fdb98a17101 |
children | 24fda36852ce |
comparison
equal
deleted
inserted
replaced
237:1fdb98a17101 | 242:d95b224e9f17 |
---|---|
334 void* os::native_java_library() { | 334 void* os::native_java_library() { |
335 if (_native_java_library == NULL) { | 335 if (_native_java_library == NULL) { |
336 char buffer[JVM_MAXPATHLEN]; | 336 char buffer[JVM_MAXPATHLEN]; |
337 char ebuf[1024]; | 337 char ebuf[1024]; |
338 | 338 |
339 // Try to load verify dll first. In 1.3 java dll depends on it and is not always | 339 // Try to load verify dll first. In 1.3 java dll depends on it and is not |
340 // able to find it when the loading executable is outside the JDK. | 340 // always able to find it when the loading executable is outside the JDK. |
341 // In order to keep working with 1.2 we ignore any loading errors. | 341 // In order to keep working with 1.2 we ignore any loading errors. |
342 hpi::dll_build_name(buffer, sizeof(buffer), Arguments::get_dll_dir(), "verify"); | 342 dll_build_name(buffer, sizeof(buffer), Arguments::get_dll_dir(), "verify"); |
343 hpi::dll_load(buffer, ebuf, sizeof(ebuf)); | 343 dll_load(buffer, ebuf, sizeof(ebuf)); |
344 | 344 |
345 // Load java dll | 345 // Load java dll |
346 hpi::dll_build_name(buffer, sizeof(buffer), Arguments::get_dll_dir(), "java"); | 346 dll_build_name(buffer, sizeof(buffer), Arguments::get_dll_dir(), "java"); |
347 _native_java_library = hpi::dll_load(buffer, ebuf, sizeof(ebuf)); | 347 _native_java_library = dll_load(buffer, ebuf, sizeof(ebuf)); |
348 if (_native_java_library == NULL) { | 348 if (_native_java_library == NULL) { |
349 vm_exit_during_initialization("Unable to load native library", ebuf); | 349 vm_exit_during_initialization("Unable to load native library", ebuf); |
350 } | 350 } |
351 // The JNI_OnLoad handling is normally done by method load in java.lang.ClassLoader$NativeLibrary, | 351 } |
352 // but the VM loads the base library explicitly so we have to check for JNI_OnLoad as well | 352 static jboolean onLoaded = JNI_FALSE; |
353 const char *onLoadSymbols[] = JNI_ONLOAD_SYMBOLS; | 353 if (onLoaded) { |
354 JNI_OnLoad_t JNI_OnLoad = CAST_TO_FN_PTR(JNI_OnLoad_t, hpi::dll_lookup(_native_java_library, onLoadSymbols[0])); | 354 // We may have to wait to fire OnLoad until TLS is initialized. |
355 if (JNI_OnLoad != NULL) { | 355 if (ThreadLocalStorage::is_initialized()) { |
356 JavaThread* thread = JavaThread::current(); | 356 // The JNI_OnLoad handling is normally done by method load in |
357 ThreadToNativeFromVM ttn(thread); | 357 // java.lang.ClassLoader$NativeLibrary, but the VM loads the base library |
358 HandleMark hm(thread); | 358 // explicitly so we have to check for JNI_OnLoad as well |
359 jint ver = (*JNI_OnLoad)(&main_vm, NULL); | 359 const char *onLoadSymbols[] = JNI_ONLOAD_SYMBOLS; |
360 if (!Threads::is_supported_jni_version_including_1_1(ver)) { | 360 JNI_OnLoad_t JNI_OnLoad = CAST_TO_FN_PTR( |
361 vm_exit_during_initialization("Unsupported JNI version"); | 361 JNI_OnLoad_t, dll_lookup(_native_java_library, onLoadSymbols[0])); |
362 if (JNI_OnLoad != NULL) { | |
363 JavaThread* thread = JavaThread::current(); | |
364 ThreadToNativeFromVM ttn(thread); | |
365 HandleMark hm(thread); | |
366 jint ver = (*JNI_OnLoad)(&main_vm, NULL); | |
367 onLoaded = JNI_TRUE; | |
368 if (!Threads::is_supported_jni_version_including_1_1(ver)) { | |
369 vm_exit_during_initialization("Unsupported JNI version"); | |
370 } | |
362 } | 371 } |
363 } | 372 } |
364 } | 373 } |
365 return _native_java_library; | 374 return _native_java_library; |
366 } | 375 } |