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_jni_BooleanArrayCriticalLocker
35 * Method: criticalNative
36 * Signature: ([Z)Z
37 */
38 JNIEXPORT jboolean JNICALL Java_nsk_share_gc_lock_jni_BooleanArrayCriticalLocker_criticalNative
39 (JNIEnv *jni_env, jobject o, jlong enterTime, jlong sleepTime) {
40 ExceptionCheckingJniEnvPtr env(jni_env);
41
42 jsize size, i;
43 jbooleanArray arr;
44 jboolean *pa;
45 jboolean hash = JNI_TRUE;
46 time_t start_time, current_time;
47
48 if (objFieldId == NULL) {
49 jclass klass = env->GetObjectClass(o);
50 objFieldId = env->GetFieldID(klass, "obj", "Ljava/lang/Object;");
51 }
52 arr = (jbooleanArray) env->GetObjectField(o, objFieldId);
53 env->SetObjectField(o, objFieldId, NULL);
54
55 size = env->GetArrayLength(arr);
56 start_time = time(NULL);
57 enterTime /= 1000;
58 current_time = 0;
59 while (current_time - start_time < enterTime) {
60 pa = (jboolean*) env->GetPrimitiveArrayCritical(arr, NULL);
61 if (pa != NULL) {
62 for (i = 0; i < size; ++i)
63 hash ^= pa[i];
64 } else {
65 hash = JNI_FALSE;
66 }
67 mssleep((long) sleepTime);
68 env->ReleasePrimitiveArrayCritical(arr, pa, 0);
69 mssleep((long) sleepTime);
70 current_time = time(NULL);
71 }
72 env->SetObjectField(o, objFieldId, arr);
73 return hash;
74 }
75
76 }
|
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_jni_BooleanArrayCriticalLocker
35 * Method: criticalNative
36 * Signature: ([Z)Z
37 */
38 JNIEXPORT jboolean JNICALL Java_nsk_share_gc_lock_jni_BooleanArrayCriticalLocker_criticalNative
39 (JNIEnv *jni_env, jobject o, jlong enterTime, jlong sleepTime) {
40 ExceptionCheckingJniEnvPtr jni(jni_env);
41
42 jsize size, i;
43 jbooleanArray arr;
44 jboolean *pa;
45 jboolean hash = JNI_TRUE;
46 time_t start_time, current_time;
47
48 if (objFieldId == NULL) {
49 jclass klass = jni->GetObjectClass(o, TRACE_JNI_CALL);
50 objFieldId = jni->GetFieldID(klass, "obj", "Ljava/lang/Object;", TRACE_JNI_CALL);
51 }
52 arr = (jbooleanArray) jni->GetObjectField(o, objFieldId, TRACE_JNI_CALL);
53 jni->SetObjectField(o, objFieldId, NULL, TRACE_JNI_CALL);
54
55 size = jni->GetArrayLength(arr, TRACE_JNI_CALL);
56 start_time = time(NULL);
57 enterTime /= 1000;
58 current_time = 0;
59 while (current_time - start_time < enterTime) {
60 pa = (jboolean*) jni->GetPrimitiveArrayCritical(arr, NULL, TRACE_JNI_CALL);
61 if (pa != NULL) {
62 for (i = 0; i < size; ++i)
63 hash ^= pa[i];
64 } else {
65 hash = JNI_FALSE;
66 }
67 mssleep((long) sleepTime);
68 jni->ReleasePrimitiveArrayCritical(arr, pa, 0, TRACE_JNI_CALL);
69 mssleep((long) sleepTime);
70 current_time = time(NULL);
71 }
72 jni->SetObjectField(o, objFieldId, arr, TRACE_JNI_CALL);
73 return hash;
74 }
75
76 }
|