--- old/test/runtime/6929067/invoke.c 2014-05-01 18:06:44.230292928 +0400 +++ /dev/null 2014-05-01 00:29:43.913437951 +0400 @@ -1,90 +0,0 @@ -#include -#include -#include - -#include - -union env_union -{ - void *void_env; - JNIEnv *jni_env; -}; - -union env_union tmp; -JNIEnv* env; -JavaVM* jvm; -JavaVMInitArgs vm_args; -JavaVMOption options[1]; -jclass class_id; -jmethodID method_id; -jint result; - -long product(unsigned long n, unsigned long m) { - if (m == 1) { - return n; - } else { - int *p = alloca(sizeof (int)); - *p = n; - return product (n, m-1) + *p; - } -} - -void * -floobydust (void *p) -{ - (*jvm)->AttachCurrentThread(jvm, &tmp.void_env, NULL); - env = tmp.jni_env; - - class_id = (*env)->FindClass (env, "T"); - assert (class_id); - - method_id = (*env)->GetStaticMethodID (env, class_id, "printIt", "()V"); - assert (method_id); - - (*env)->CallStaticVoidMethod (env, class_id, method_id, NULL); - - (*jvm)->DetachCurrentThread(jvm); - - printf("%ld\n", product(5000,5000)); - - (*jvm)->AttachCurrentThread(jvm, &tmp.void_env, NULL); - env = tmp.jni_env; - - class_id = (*env)->FindClass (env, "T"); - assert (class_id); - - method_id = (*env)->GetStaticMethodID (env, class_id, "printIt", "()V"); - assert (method_id); - - (*env)->CallStaticVoidMethod (env, class_id, method_id, NULL); - - (*jvm)->DetachCurrentThread(jvm); - - printf("%ld\n", product(5000,5000)); - - return NULL; -} - -int -main (int argc, const char** argv) -{ - options[0].optionString = "-Xss320k"; - - vm_args.version = JNI_VERSION_1_2; - vm_args.ignoreUnrecognized = JNI_TRUE; - vm_args.options = options; - vm_args.nOptions = 1; - - result = JNI_CreateJavaVM (&jvm, &tmp.void_env, &vm_args); - assert (result >= 0); - - env = tmp.jni_env; - - floobydust (NULL); - - pthread_t thr; - pthread_create (&thr, NULL, floobydust, NULL); - pthread_join (thr, NULL); - - return 0; -}