On 12/6/17 7:38 PM, David Holmes wrote:
On 7/12/2017 1:08 PM, Chris Plummer wrote:
On 12/6/17 6:47 PM, David Holmes wrote:
Hi Chris,

On 7/12/2017 8:38 AM, Chris Plummer wrote:
Hello,

Please review the following:

https://bugs.openjdk.java.net/browse/JDK-8191229
http://cr.openjdk.java.net/~cjplummer/8191229/webrev.00/

I expected to see the initialization done in JNI_OnLoad, not in a new init() method.
I was worried it wouldn't work because of JDK-8188052, but I guess that only impacts JNI_OnUnload. I can change it to init from JNI_OnLoad().

Yes please use JNI_OnLoad.
Having issues with that. The IsInstanceOf() done during the jvmti callback is crashing in JNIHandles::resolve_non_null(). Something is messed up about the testclass handle, but I can't figure out what. I'm initializing it the same way, except in OnLoad() rather than in init().

JNIEXPORT jint JNICALL
JNI_OnLoad(JavaVM *jvm, void *reserved) {
    jint res;
    JNIEnv *env;

    res = JNI_ENV_PTR(jvm)->GetEnv(JNI_ENV_ARG(jvm, (void **) &env),
                                   JVMTI_VERSION_1);
    testClass = (*env)->FindClass(env, TEST_CLASS);
    if (testClass != NULL) {
      testClass = (*env)->NewGlobalRef(env, testClass);
    }
    return JNI_VERSION_1_8;
}

Very strange.

Chris

Thanks,
David

Chris

David
-----

The test is testing contended monitor support. After registering the callback, it gets an unexpected notification of a contended monitor, which is happening while the finalizer thread is running. In the callback the test does a FindClass to find a test class, but the classloader context is not correct when the finalizer thread is current, so FindClass fails and leaves an exception pending (probably blowing away the finalzer thread) and also (separately) causes the test to fail. It's unknown why this callback is suddenly being triggered, but the callback itself is not a bug, and the test needs to defend against it.

The fix is to lookup the test class during test initialization and keep it cached, rather than look it up every time there is a contended monitor callback.

thanks,

Chris




Reply via email to