src/share/vm/prims/jni.cpp

Print this page
rev 2520 : 7016112: CMS: crash during promotion testing
Summary: stdlib:qsort() does byte-by-byte swapping on Windows. This leads to pointer shearing. Fix is to implement a quicksort that does full pointer updates.
Reviewed-by:

*** 3294,3303 **** --- 3294,3316 ---- args->javaStackSize = (jint)(ThreadStackSize * K); } return ret; } + #ifndef PRODUCT + + #include "utilities/quicksort.hpp" + + void executeInternalVMTests() { + if (ExecuteInternalVMTests) { + assert(quicksort::testQuicksort(), "testQuicksort failed"); + tty->print_cr("All tests passed"); + } + } + + #endif + HS_DTRACE_PROBE_DECL3(hotspot_jni, CreateJavaVM__entry, vm, penv, args); DT_RETURN_MARK_DECL(CreateJavaVM, jint); _JNI_IMPORT_OR_EXPORT_ jint JNICALL JNI_CreateJavaVM(JavaVM **vm, void **penv, void *args) { HS_DTRACE_PROBE3(hotspot_jni, CreateJavaVM__entry, vm, penv, args);
*** 3384,3393 **** --- 3397,3407 ---- // control both compiler and architectural-based reordering. OrderAccess::release_store(&vm_created, 0); } NOT_PRODUCT(test_error_handler(ErrorHandlerTest)); + NOT_PRODUCT(executeInternalVMTests()); return result; } HS_DTRACE_PROBE_DECL3(hotspot_jni, GetCreatedJavaVMs__entry, \ JavaVM**, jsize, jsize*);