test/runtime/6929067/invoke.c

Thu, 19 Sep 2013 09:36:51 -0700

author
cl
date
Thu, 19 Sep 2013 09:36:51 -0700
changeset 5664
34aa07e92d22
parent 0
f90c822e73f8
permissions
-rw-r--r--

Added tag jdk8-b108 for changeset 85072013aad4

aoqi@0 1 #include <assert.h>
aoqi@0 2 #include <jni.h>
aoqi@0 3 #include <alloca.h>
aoqi@0 4
aoqi@0 5 #include <pthread.h>
aoqi@0 6
aoqi@0 7 union env_union
aoqi@0 8 {
aoqi@0 9 void *void_env;
aoqi@0 10 JNIEnv *jni_env;
aoqi@0 11 };
aoqi@0 12
aoqi@0 13 union env_union tmp;
aoqi@0 14 JNIEnv* env;
aoqi@0 15 JavaVM* jvm;
aoqi@0 16 JavaVMInitArgs vm_args;
aoqi@0 17 JavaVMOption options[1];
aoqi@0 18 jclass class_id;
aoqi@0 19 jmethodID method_id;
aoqi@0 20 jint result;
aoqi@0 21
aoqi@0 22 long product(unsigned long n, unsigned long m) {
aoqi@0 23 if (m == 1) {
aoqi@0 24 return n;
aoqi@0 25 } else {
aoqi@0 26 int *p = alloca(sizeof (int));
aoqi@0 27 *p = n;
aoqi@0 28 return product (n, m-1) + *p;
aoqi@0 29 }
aoqi@0 30 }
aoqi@0 31
aoqi@0 32 void *
aoqi@0 33 floobydust (void *p)
aoqi@0 34 {
aoqi@0 35 (*jvm)->AttachCurrentThread(jvm, &tmp.void_env, NULL);
aoqi@0 36 env = tmp.jni_env;
aoqi@0 37
aoqi@0 38 class_id = (*env)->FindClass (env, "T");
aoqi@0 39 assert (class_id);
aoqi@0 40
aoqi@0 41 method_id = (*env)->GetStaticMethodID (env, class_id, "printIt", "()V");
aoqi@0 42 assert (method_id);
aoqi@0 43
aoqi@0 44 (*env)->CallStaticVoidMethod (env, class_id, method_id, NULL);
aoqi@0 45
aoqi@0 46 (*jvm)->DetachCurrentThread(jvm);
aoqi@0 47
aoqi@0 48 printf("%ld\n", product(5000,5000));
aoqi@0 49
aoqi@0 50 (*jvm)->AttachCurrentThread(jvm, &tmp.void_env, NULL);
aoqi@0 51 env = tmp.jni_env;
aoqi@0 52
aoqi@0 53 class_id = (*env)->FindClass (env, "T");
aoqi@0 54 assert (class_id);
aoqi@0 55
aoqi@0 56 method_id = (*env)->GetStaticMethodID (env, class_id, "printIt", "()V");
aoqi@0 57 assert (method_id);
aoqi@0 58
aoqi@0 59 (*env)->CallStaticVoidMethod (env, class_id, method_id, NULL);
aoqi@0 60
aoqi@0 61 (*jvm)->DetachCurrentThread(jvm);
aoqi@0 62
aoqi@0 63 printf("%ld\n", product(5000,5000));
aoqi@0 64
aoqi@0 65 return NULL;
aoqi@0 66 }
aoqi@0 67
aoqi@0 68 int
aoqi@0 69 main (int argc, const char** argv)
aoqi@0 70 {
aoqi@0 71 options[0].optionString = "-Xss320k";
aoqi@0 72
aoqi@0 73 vm_args.version = JNI_VERSION_1_2;
aoqi@0 74 vm_args.ignoreUnrecognized = JNI_TRUE;
aoqi@0 75 vm_args.options = options;
aoqi@0 76 vm_args.nOptions = 1;
aoqi@0 77
aoqi@0 78 result = JNI_CreateJavaVM (&jvm, &tmp.void_env, &vm_args);
aoqi@0 79 assert (result >= 0);
aoqi@0 80
aoqi@0 81 env = tmp.jni_env;
aoqi@0 82
aoqi@0 83 floobydust (NULL);
aoqi@0 84
aoqi@0 85 pthread_t thr;
aoqi@0 86 pthread_create (&thr, NULL, floobydust, NULL);
aoqi@0 87 pthread_join (thr, NULL);
aoqi@0 88
aoqi@0 89 return 0;
aoqi@0 90 }

mercurial