20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23 #include <jni.h>
24 #include <stdio.h>
25 #include <time.h>
26 #include "ExceptionCheckingJniEnv.hpp"
27 #include "jni_tools.h"
28
29 extern "C" {
30
31 static jfieldID objFieldId = NULL;
32
33 /*
34 * Class: nsk_share_gc_lock_jniref_JNIRefLocker
35 * Method: criticalNative
36 * Signature: (JJ)V
37 */
38 JNIEXPORT void JNICALL Java_nsk_share_gc_lock_jniref_JNIRefLocker_criticalNative
39 (JNIEnv *jni_env, jobject o, jlong enterTime, jlong sleepTime) {
40 ExceptionCheckingJniEnvPtr env(jni_env);
41
42 jobject obj;
43 jobject gref, lref, gwref;
44 time_t start_time, current_time;
45
46 if (objFieldId == NULL) {
47 jclass klass = env->GetObjectClass(o);
48 objFieldId = env->GetFieldID(klass, "obj", "Ljava/lang/Object;");
49 }
50
51 obj = env->GetObjectField(o, objFieldId);
52 env->SetObjectField(o, objFieldId, NULL);
53
54 start_time = time(NULL);
55 enterTime /= 1000;
56 current_time = 0;
57 while (current_time - start_time < enterTime) {
58 gref = env->NewGlobalRef(obj);
59 lref = env->NewLocalRef(obj);
60 gwref = env->NewWeakGlobalRef(obj);
61 mssleep((long) sleepTime);
62 env->DeleteGlobalRef(gref);
63 env->DeleteLocalRef(lref);
64 env->DeleteWeakGlobalRef(gwref);
65 mssleep((long) sleepTime);
66 current_time = time(NULL);
67 }
68 env->SetObjectField(o, objFieldId, obj);
69 }
70
71 }
|
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23 #include <jni.h>
24 #include <stdio.h>
25 #include <time.h>
26 #include "ExceptionCheckingJniEnv.hpp"
27 #include "jni_tools.h"
28
29 extern "C" {
30
31 static jfieldID objFieldId = NULL;
32
33 /*
34 * Class: nsk_share_gc_lock_jniref_JNIRefLocker
35 * Method: criticalNative
36 * Signature: (JJ)V
37 */
38 JNIEXPORT void JNICALL Java_nsk_share_gc_lock_jniref_JNIRefLocker_criticalNative
39 (JNIEnv *jni_env, jobject o, jlong enterTime, jlong sleepTime) {
40 ExceptionCheckingJniEnvPtr jni(jni_env);
41
42 jobject obj;
43 jobject gref, lref, gwref;
44 time_t start_time, current_time;
45
46 if (objFieldId == NULL) {
47 jclass klass = jni->GetObjectClass(o, TRACE_JNI_CALL);
48 objFieldId = jni->GetFieldID(klass, "obj", "Ljava/lang/Object;", TRACE_JNI_CALL);
49 }
50
51 obj = jni->GetObjectField(o, objFieldId, TRACE_JNI_CALL);
52 jni->SetObjectField(o, objFieldId, NULL, TRACE_JNI_CALL);
53
54 start_time = time(NULL);
55 enterTime /= 1000;
56 current_time = 0;
57 while (current_time - start_time < enterTime) {
58 gref = jni->NewGlobalRef(obj, TRACE_JNI_CALL);
59 lref = jni->NewLocalRef(obj, TRACE_JNI_CALL);
60 gwref = jni->NewWeakGlobalRef(obj, TRACE_JNI_CALL);
61 mssleep((long) sleepTime);
62 jni->DeleteGlobalRef(gref, TRACE_JNI_CALL);
63 jni->DeleteLocalRef(lref, TRACE_JNI_CALL);
64 jni->DeleteWeakGlobalRef(gwref, TRACE_JNI_CALL);
65 mssleep((long) sleepTime);
66 current_time = time(NULL);
67 }
68 jni->SetObjectField(o, objFieldId, obj, TRACE_JNI_CALL);
69 }
70
71 }
|