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 }