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_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 }
|
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_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 jni(jni_env);
41
42 jobject obj;
43 jobject gref;
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 obj = jni->GetObjectField(o, objFieldId, TRACE_JNI_CALL);
51 jni->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 = jni->NewLocalRef(obj, TRACE_JNI_CALL);
57 mssleep((long) sleepTime);
58 jni->DeleteLocalRef(gref, TRACE_JNI_CALL);
59 mssleep((long) sleepTime);
60 current_time = time(NULL);
61 }
62 jni->SetObjectField(o, objFieldId, obj, TRACE_JNI_CALL);
63 }
64
65 }
|