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