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