28 #include "jni_tools.h"
29
30 extern "C" {
31
32 static jfieldID objFieldId = NULL;
33
34 /*
35 * Class: nsk_share_gc_lock_jniref_JNIGlobalRefLocker
36 * Method: criticalNative
37 * Signature: (JJ)V
38 */
39 JNIEXPORT void JNICALL Java_nsk_share_gc_lock_jniref_JNIGlobalRefLocker_criticalNative
40 (JNIEnv *jni_env, jobject o, jlong enterTime, jlong sleepTime) {
41 ExceptionCheckingJniEnvPtr env(jni_env);
42
43 jobject obj;
44 jobject gref;
45 time_t start_time, current_time;
46
47 if (objFieldId == NULL) {
48 jclass klass = env->GetObjectClass(o);
49 objFieldId = env->GetFieldID(klass, "obj", "Ljava/lang/Object;");
50 }
51 obj = env->GetObjectField(o, objFieldId);
52 env->SetObjectField(o, objFieldId, NULL);
53 start_time = time(NULL);
54 enterTime /= 1000;
55 current_time = 0;
56 while (current_time - start_time < enterTime) {
57 gref = env->NewGlobalRef(obj);
58 mssleep((long) sleepTime);
59 env->DeleteGlobalRef(gref);
60 mssleep((long) sleepTime);
61 current_time = time(NULL);
62 }
63 env->SetObjectField(o, objFieldId, obj);
64 }
65
66 }
|
28 #include "jni_tools.h"
29
30 extern "C" {
31
32 static jfieldID objFieldId = NULL;
33
34 /*
35 * Class: nsk_share_gc_lock_jniref_JNIGlobalRefLocker
36 * Method: criticalNative
37 * Signature: (JJ)V
38 */
39 JNIEXPORT void JNICALL Java_nsk_share_gc_lock_jniref_JNIGlobalRefLocker_criticalNative
40 (JNIEnv *jni_env, jobject o, jlong enterTime, jlong sleepTime) {
41 ExceptionCheckingJniEnvPtr env(jni_env);
42
43 jobject obj;
44 jobject gref;
45 time_t start_time, current_time;
46
47 if (objFieldId == NULL) {
48 jclass klass = env->GetObjectClass(o, TRACE_JNI_CALL);
49 objFieldId = env->GetFieldID(klass, "obj", "Ljava/lang/Object;", TRACE_JNI_CALL);
50 }
51 obj = env->GetObjectField(o, objFieldId, TRACE_JNI_CALL);
52 env->SetObjectField(o, objFieldId, NULL, TRACE_JNI_CALL);
53 start_time = time(NULL);
54 enterTime /= 1000;
55 current_time = 0;
56 while (current_time - start_time < enterTime) {
57 gref = env->NewGlobalRef(obj, TRACE_JNI_CALL);
58 mssleep((long) sleepTime);
59 env->DeleteGlobalRef(gref, TRACE_JNI_CALL);
60 mssleep((long) sleepTime);
61 current_time = time(NULL);
62 }
63 env->SetObjectField(o, objFieldId, obj, TRACE_JNI_CALL);
64 }
65
66 }
|