27 #include "jni_tools.h"
28
29 extern "C" {
30
31 static jfieldID objFieldId = NULL;
32
33 /*
34 * Class: nsk_share_gc_lock_jniref_JNILocalRefLocker
35 * Method: criticalNative
36 * Signature: (JJ)V
37 */
38 JNIEXPORT void JNICALL Java_nsk_share_gc_lock_jniref_JNILocalRefLocker_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 start_time = time(NULL);
53 enterTime /= 1000;
54 current_time = 0;
55 while (current_time - start_time < enterTime) {
56 gref = env->NewLocalRef(obj);
57 mssleep((long) sleepTime);
58 env->DeleteLocalRef(gref);
59 mssleep((long) sleepTime);
60 current_time = time(NULL);
61 }
62 env->SetObjectField(o, objFieldId, obj);
63 }
64
65 }
|
27 #include "jni_tools.h"
28
29 extern "C" {
30
31 static jfieldID objFieldId = NULL;
32
33 /*
34 * Class: nsk_share_gc_lock_jniref_JNILocalRefLocker
35 * Method: criticalNative
36 * Signature: (JJ)V
37 */
38 JNIEXPORT void JNICALL Java_nsk_share_gc_lock_jniref_JNILocalRefLocker_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 start_time = time(NULL);
53 enterTime /= 1000;
54 current_time = 0;
55 while (current_time - start_time < enterTime) {
56 gref = env->NewLocalRef(obj, TRACE_JNI_CALL);
57 mssleep((long) sleepTime);
58 env->DeleteLocalRef(gref, TRACE_JNI_CALL);
59 mssleep((long) sleepTime);
60 current_time = time(NULL);
61 }
62 env->SetObjectField(o, objFieldId, obj, TRACE_JNI_CALL);
63 }
64
65 }
|