harmony-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From gshiman...@apache.org
Subject svn commit: r597138 [2/15] - in /harmony/enhanced/drlvm/trunk: build/make/ build/make/components/vm/ vm/include/ vm/include/open/ vm/jitrino/src/codegenerator/ia32/ vm/port/src/encoder/ia32_em64t/ vm/port/src/lil/ia32/pim/ vm/tests/ncai/ vm/tests/ncai/...
Date Wed, 21 Nov 2007 16:29:54 GMT
Added: harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllModules/GetAllModules02n/GetAllModules02n.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllModules/GetAllModules02n/GetAllModules02n.cpp?rev=597138&view=auto
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllModules/GetAllModules02n/GetAllModules02n.cpp (added)
+++ harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllModules/GetAllModules02n/GetAllModules02n.cpp Wed Nov 21 08:29:40 2007
@@ -0,0 +1,131 @@
+/**
+ * @author Petr Ivanov
+ * @version $Revision: 1.1.1.1 $
+ *
+ */
+
+/* *********************************************************************** */
+
+#include "events.h"
+#include "utils.h"
+#include "ncai.h"
+
+#include <string.h>
+
+static bool test = false;
+static bool util = false;
+static bool flag = false;
+
+const char test_case_name[] = "GetAllModules02n";
+
+/* *********************************************************************** */
+
+
+JNIEXPORT jint JNICALL Agent_OnLoad(prms_AGENT_ONLOAD)
+{
+    Callbacks CB;
+    check_AGENT_ONLOAD;
+    jvmtiEvent events[] = { JVMTI_EVENT_EXCEPTION, JVMTI_EVENT_VM_DEATH };
+    cb_exc;
+    cb_death;
+    return func_for_Agent_OnLoad(vm, options, reserved, &CB,
+        events, sizeof(events)/sizeof(jvmtiEvent), test_case_name, DEBUG_OUT);
+}
+
+/* *********************************************************************** */
+
+void JNICALL callbackException(prms_EXCPT)
+{
+    check_EXCPT;
+    if (flag) return;
+
+    /*
+     * Function separate all other exceptions in all other method
+     */
+    if (!check_phase_and_method_debug(jvmti_env, method, SPP_LIVE_ONLY,
+                "special_method", DEBUG_OUT)) return;
+
+    flag = true;
+    util = true;
+
+    jvmtiError err;
+
+    jvmtiExtensionFunctionInfo* ext_info = NULL;
+    jint ext_count = 0;
+
+    err = jvmti_env->GetExtensionFunctions(&ext_count, &ext_info);
+
+    if (err != JVMTI_ERROR_NONE)
+    {
+        fprintf(stderr, "test_function: GetExtensionFunctions() returned error: %d, '%s'\n",
+            err, get_jvmti_eror_text(err));
+        test = false;
+        return;
+    }
+
+    if (ext_count == 0 || ext_info == NULL)
+    {
+        fprintf(stderr, "test_function: GetExtensionFunctions() returned no extensions\n");
+        test = false;
+        return;
+    }
+
+    jvmtiExtensionFunction get_ncai_func = NULL;
+
+    for (int i = 0; i < ext_count; i++)
+    {
+        if (strcmp(ext_info[i].id, "org.apache.harmony.vm.GetExtensionEnv") == 0)
+        {
+            get_ncai_func = ext_info[i].func;
+            break;
+        }
+    }
+
+    if (get_ncai_func == NULL)
+    {
+        fprintf(stderr, "test_function: GetNCAIEnvironment() nas not been found among JVMTI extensions\n");
+        test = false;
+        return;
+    }
+
+    ncaiEnv* ncai_env = NULL;
+
+    err = get_ncai_func(jvmti_env, &ncai_env, NCAI_VERSION_1_0);
+
+    if (err != JVMTI_ERROR_NONE)
+    {
+        fprintf(stderr, "test_function: get_ncai_func() returned error: %d, '%s'\n",
+            err, get_jvmti_eror_text(err));
+        test = false;
+        return;
+    }
+
+    if (ncai_env == NULL)
+    {
+        fprintf(stderr, "test_function: get_ncai_func() returned NULL environment\n");
+        test = false;
+        return;
+    }
+
+    printf("test_function: ncaiEnv obtained successfully\n");
+
+    jint tcount = 0;
+
+    ncaiError ncai_err = ncai_env->GetAllLoadedModules(&tcount, NULL);
+    if(ncai_err != NCAI_ERROR_NULL_POINTER)
+    {
+        fprintf(stderr, "test_function: GetAllLoadedModules() returned error: %d\n", ncai_err);
+        test = false;
+        return;
+    }
+
+    test = true;
+}
+
+void JNICALL callbackVMDeath(prms_VMDEATH)
+{
+    check_VMDEATH;
+    func_for_callback_VMDeath(jni_env, jvmti_env, test_case_name, test, util);
+}
+
+/* *********************************************************************** */

Propchange: harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllModules/GetAllModules02n/GetAllModules02n.cpp
------------------------------------------------------------------------------
    svn:eol-style = native

Added: harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllModules/GetAllModules02n/GetAllModules02n.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllModules/GetAllModules02n/GetAllModules02n.java?rev=597138&view=auto
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllModules/GetAllModules02n/GetAllModules02n.java (added)
+++ harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllModules/GetAllModules02n/GetAllModules02n.java Wed Nov 21 08:29:40 2007
@@ -0,0 +1,26 @@
+package ncai.funcs;
+
+/**
+ * @author Petr Ivanov
+ * @version $Revision: 1.1.1.1 $
+ *
+ */
+public class GetAllModules02n {
+
+    static public void main(String args[]) {
+        special_method();
+        return;
+    }
+
+    static public void special_method() {
+        /*
+         * Transfer control to native part.
+         */
+        try {
+            throw new InterruptedException();
+        } catch (Throwable tex) { }
+        return;
+    }
+}
+
+

Propchange: harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllModules/GetAllModules02n/GetAllModules02n.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllModules/GetAllModules03/GetAllModules03.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllModules/GetAllModules03/GetAllModules03.cpp?rev=597138&view=auto
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllModules/GetAllModules03/GetAllModules03.cpp (added)
+++ harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllModules/GetAllModules03/GetAllModules03.cpp Wed Nov 21 08:29:40 2007
@@ -0,0 +1,160 @@
+/**
+ * @author Petr Ivanov
+ * @version $Revision: 1.1.1.1 $
+ *
+ */
+
+/* *********************************************************************** */
+
+#include "events.h"
+#include "utils.h"
+#include "ncai.h"
+
+static bool test = false;
+static bool util = false;
+static bool flag = false;
+
+const char test_case_name[] = "GetAllModules03";
+
+/* *********************************************************************** */
+
+
+JNIEXPORT jint JNICALL Agent_OnLoad(prms_AGENT_ONLOAD)
+{
+    Callbacks CB;
+    check_AGENT_ONLOAD;
+    jvmtiEvent events[] = { JVMTI_EVENT_EXCEPTION, JVMTI_EVENT_VM_DEATH };
+    cb_exc;
+    cb_death;
+    return func_for_Agent_OnLoad(vm, options, reserved, &CB,
+        events, sizeof(events)/sizeof(jvmtiEvent), test_case_name, DEBUG_OUT);
+}
+
+extern "C" JNIEXPORT void JNICALL Java_ncai_funcs_GetAllModules03_TestFunction
+  (JNIEnv *env, jclass clazz)
+{
+    fprintf(stderr, "JNI TestFunction: run\n");
+    return;
+}
+
+/* *********************************************************************** */
+
+void JNICALL callbackException(prms_EXCPT)
+{
+    check_EXCPT;
+    if (flag) return;
+
+    /*
+     * Function separate all other exceptions in all other method
+     */
+    if (!check_phase_and_method_debug(jvmti_env, method, SPP_LIVE_ONLY,
+                "special_method", DEBUG_OUT)) return;
+
+    flag = true;
+    util = true;
+
+    jvmtiError err;
+    ncaiError ncai_err;
+
+    jvmtiExtensionFunctionInfo* ext_info = NULL;
+    jint ext_count = 0;
+
+    err = jvmti_env->GetExtensionFunctions(&ext_count, &ext_info);
+
+    fprintf(stderr, "|");
+    if (err != JVMTI_ERROR_NONE)
+    {
+        fprintf(stderr, "test_function: GetExtensionFunctions() returned error: %d, '%s'\n",
+            err, get_jvmti_eror_text(err));
+        test = false;
+        return;
+    }
+
+    fprintf(stderr, "|");
+    if (ext_count == 0 || ext_info == NULL)
+    {
+        fprintf(stderr, "test_function: GetExtensionFunctions() returned no extensions\n");
+        test = false;
+        return;
+    }
+
+    jvmtiExtensionFunction get_ncai_func = NULL;
+
+    for (int i = 0; i < ext_count; i++)
+    {
+        if (strcmp(ext_info[i].id, "org.apache.harmony.vm.GetExtensionEnv") == 0)
+        {
+            get_ncai_func = ext_info[i].func;
+            break;
+        }
+    }
+
+    fprintf(stderr, "|");
+    if (get_ncai_func == NULL)
+    {
+        fprintf(stderr, "test_function: GetNCAIEnvironment() nas not been found among JVMTI extensions\n");
+        test = false;
+        return;
+    }
+
+    ncaiEnv* ncai_env = NULL;
+
+    err = get_ncai_func(jvmti_env, &ncai_env, NCAI_VERSION_1_0);
+
+    fprintf(stderr, "|");
+    if (err != JVMTI_ERROR_NONE)
+    {
+        fprintf(stderr, "test_function: get_ncai_func() returned error: %d, '%s'\n",
+            err, get_jvmti_eror_text(err));
+        test = false;
+        return;
+    }
+
+    fprintf(stderr, "|");
+    if (ncai_env == NULL)
+    {
+        fprintf(stderr, "test_function: get_ncai_func() returned NULL environment\n");
+        test = false;
+        return;
+    }
+
+    printf("test_function: ncaiEnv obtained successfully\n");
+
+    ncaiModule* modules;
+    jint tcount = 0;
+    jint j = 0;
+
+    ncai_env->GetAllLoadedModules(&tcount, &modules);
+    fprintf(stderr, "MethodExit: GetAllLoadedModules(), count = %d\n", tcount);
+
+    bool native_present = false;
+
+    for (j = 0; j < tcount; j++)
+    {
+        ncaiModuleInfo info;
+        ncai_err = ncai_env->GetModuleInfo(modules[j], &info);
+        fprintf(stderr, "|");
+        if (ncai_err != NCAI_ERROR_NONE)
+        {
+            fprintf(stderr, "ncai_env->GetModuleInfo() returned error: %d, '%s'\n", ncai_err,
+                get_jvmti_eror_text(err));
+            test = false;
+            return;
+        }
+        fprintf(stderr, "info on module %d: name - %s, type - %d\n", j, info.name, info.kind);
+        if((strcmp(info.name,"GetAllModules03") == 0
+            || strcmp(info.name,"getallmodules03") == 0)
+            && info.kind == NCAI_MODULE_JNI_LIBRARY)
+            native_present = true;
+    }
+
+    test = native_present;
+}
+
+void JNICALL callbackVMDeath(prms_VMDEATH)
+{
+    check_VMDEATH;
+    func_for_callback_VMDeath(jni_env, jvmti_env, test_case_name, test, util);
+}
+
+/* *********************************************************************** */

Propchange: harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllModules/GetAllModules03/GetAllModules03.cpp
------------------------------------------------------------------------------
    svn:eol-style = native

Added: harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllModules/GetAllModules03/GetAllModules03.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllModules/GetAllModules03/GetAllModules03.java?rev=597138&view=auto
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllModules/GetAllModules03/GetAllModules03.java (added)
+++ harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllModules/GetAllModules03/GetAllModules03.java Wed Nov 21 08:29:40 2007
@@ -0,0 +1,38 @@
+package ncai.funcs;
+
+/**
+ * @author Petr Ivanov
+ * @version $Revision: 1.1.1.1 $
+ *
+ */
+public class GetAllModules03 {
+    public static native void TestFunction();
+    static boolean NoLibrary = false;
+    static {
+        try{
+            System.loadLibrary("GetAllModules03");
+        }
+        catch(Throwable e){
+            NoLibrary = true;
+        }
+    }
+
+    static public void main(String args[]) {
+        if(NoLibrary) return;
+        TestFunction();
+        special_method();
+        return;
+    }
+
+    static public void special_method() {
+        /*
+         * Transfer control to native part.
+         */
+        try {
+            throw new InterruptedException();
+        } catch (Throwable tex) { }
+        return;
+    }
+}
+
+

Propchange: harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllModules/GetAllModules03/GetAllModules03.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllThreads/GetAllThreads01/GetAllThreads01.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllThreads/GetAllThreads01/GetAllThreads01.cpp?rev=597138&view=auto
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllThreads/GetAllThreads01/GetAllThreads01.cpp (added)
+++ harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllThreads/GetAllThreads01/GetAllThreads01.cpp Wed Nov 21 08:29:40 2007
@@ -0,0 +1,315 @@
+/**
+ * @author Petr Ivanov
+ * @version $Revision: 1.1.1.1 $
+ *
+ */
+
+/* *********************************************************************** */
+
+#include "events.h"
+#include "utils.h"
+#include "ncai.h"
+
+#ifdef POSIX
+#include <stdlib.h>
+#include <time.h>
+#else
+#include <windows.h>
+#include <CRTDBG.H>
+#endif
+
+#ifdef POSIX
+#define SLEEP_UNIVERSAL(_x_)  { timespec delay = {(_x_)/1000, 1000000*((_x_)%1000)}; nanosleep(&delay, NULL); }
+#else // #ifdef POSIX
+#define SLEEP_UNIVERSAL(_x_)  Sleep((_x_))
+#endif // #ifdef POSIX
+
+static int g_stop_thread = 0;
+static int g_resume_agent_thread = 0;
+//static jthread g_thread_jthread;
+//static jthread g_agent_thread;
+
+static bool test = false;
+static bool util = false;
+static bool flag = false;
+
+const char test_case_name[] = "GetAllThreads01";
+/*
+static void Test1(JNIEnv *env, jobject obj);
+static void Test2(JNIEnv *env, jobject obj);
+static void Test3(JNIEnv *env, jobject obj);
+//static void JNICALL test_function(jvmtiEnv*, JNIEnv*, void*);
+static  bool CheckFrames(ncaiEnv*, ncaiThread, ncaiFrameInfo**, jint*);*/
+
+extern "C" JNIEXPORT void JNICALL
+Java_ncai_funcs_GetAllThreads01_resumeagent(JNIEnv *env, jclass cls)
+{
+    //warning fix
+    int w_fix = sizeof(cls);
+    w_fix += sizeof(env);
+    //
+
+    g_resume_agent_thread = 1;
+}
+
+extern "C" JNIEXPORT jboolean JNICALL
+Java_ncai_funcs_GetAllThreads01_stopsignal(JNIEnv *env, jclass cls)
+{
+    //warning fix
+    int w_fix = sizeof(cls);
+    w_fix += sizeof(env);
+    //
+
+    return g_stop_thread ? true : false;
+}
+
+extern "C" JNIEXPORT void JNICALL Java_ncai_funcs_GetAllThreads01_TestFunction1
+  (JNIEnv *env, jobject obj)
+{
+    //warning fix
+    int w_fix = sizeof(obj);
+    w_fix += sizeof(env);
+    //
+    fprintf(stderr, "thread - native TestFunction1\n");
+
+    g_resume_agent_thread = 1;
+    while(!g_stop_thread)
+    {
+        fprintf(stderr, "thread... \n");
+        SLEEP_UNIVERSAL(100);
+    }
+
+    return;
+}
+
+void JNICALL ThreadStart(jvmtiEnv *jvmti_env,
+            JNIEnv* jni_env,
+            jthread thread)
+{
+    //warning fix
+    int w_fix = 0;
+    w_fix += sizeof(jni_env);
+    //
+
+    jvmtiPhase phase;
+    jvmtiError result;
+    jvmtiThreadInfo tinfo;
+
+    result = jvmti_env->GetPhase(&phase);
+    if (result != JVMTI_ERROR_NONE || phase != JVMTI_PHASE_LIVE)
+        return;
+
+    result = jvmti_env->GetThreadInfo(thread, &tinfo);
+    if (result != JVMTI_ERROR_NONE)
+        return;
+
+    if (strcmp(tinfo.name, "java_thread") != 0)
+        return;
+
+    printf("ThreadStart: java_thread\n");
+//    g_thread_jthread = jni_env->NewGlobalRef(thread);
+/*
+    jclass clazz = jni_env->FindClass("java/lang/Thread");
+    if (!clazz)
+    {
+        fprintf(stderr, "\tnative: JNI: FindClass failed\n");
+        return;
+    }
+
+    jmethodID mid = jni_env->GetMethodID(clazz, "<init>", "()V");
+    if (!mid)
+    {
+        fprintf(stderr, "\tnative: JNI: GetMethodID failed\n");
+        return;
+    }
+
+    g_agent_thread = jni_env->NewObject(clazz, mid, "native_agent_thread");
+    if (!g_agent_thread)
+    {
+        fprintf(stderr, "\tnative: JNI: NewObject failed\n");
+        return;
+    }
+
+    g_agent_thread = jni_env->NewGlobalRef(g_agent_thread);
+    result = jvmti_env->GetThreadInfo(g_agent_thread, &tinfo);
+    if (result != JVMTI_ERROR_NONE)
+    {
+        fprintf(stderr, "\tnative: JNI: GetThreadInfo failed\n");
+    }
+
+    result = jvmti_env->RunAgentThread(g_agent_thread, test_function, NULL, JVMTI_THREAD_NORM_PRIORITY);
+    if (result != JVMTI_ERROR_NONE)
+    {
+        fprintf(stderr, "\tnative: jvmti: RunAgentThread failed\n");
+        return;
+    }*/
+}
+
+/* *********************************************************************** */
+
+JNIEXPORT jint JNICALL Agent_OnLoad(prms_AGENT_ONLOAD)
+{
+
+    Callbacks CB;
+    CB.cbThreadStart = &ThreadStart;
+    check_AGENT_ONLOAD;
+    jvmtiEvent events[] = { JVMTI_EVENT_EXCEPTION, JVMTI_EVENT_THREAD_START, JVMTI_EVENT_VM_DEATH };
+    cb_exc;
+    cb_death;
+    return func_for_Agent_OnLoad(vm, options, reserved, &CB,
+        events, sizeof(events)/sizeof(jvmtiEvent), test_case_name, DEBUG_OUT);
+}
+
+/* *********************************************************************** */
+
+void JNICALL callbackException(jvmtiEnv *jvmti_env, JNIEnv* jni_env,
+                               jthread thread, jmethodID method,
+                               jlocation location, jobject exception,
+                               jmethodID catch_method, jlocation catch_location)
+{
+    check_EXCPT;
+    if (flag) return;
+    /*
+     * Function separate all other exceptions in all other method
+     */
+    if (!check_phase_and_method_debug(jvmti_env, method, SPP_LIVE_ONLY,
+                "special_method", DEBUG_OUT)) return;
+
+    flag = true;
+    util = true;
+
+    fprintf(stderr, "agent... \n");
+    SLEEP_UNIVERSAL(300);
+    ////////////////////ncai env get
+    jvmtiError err;
+    ncaiError ncai_err;
+
+    jvmtiExtensionFunctionInfo* ext_info = NULL;
+    jint ext_count = 0;
+
+    err = jvmti_env->GetExtensionFunctions(&ext_count, &ext_info);
+
+    if (err != JVMTI_ERROR_NONE)
+    {
+        fprintf(stderr, "test_function: GetExtensionFunctions() returned error: %d, '%s'\n",
+            err, get_jvmti_eror_text(err));
+        test = false;
+        return;
+    }
+
+    fprintf(stderr, "agent... \n");
+    if (ext_count == 0 || ext_info == NULL)
+    {
+        fprintf(stderr, "test_function: GetExtensionFunctions() returned no extensions\n");
+        test = false;
+        return;
+    }
+
+    jvmtiExtensionFunction get_ncai_func = NULL;
+
+    fprintf(stderr, "agent... \n");
+    for (int k = 0; k < ext_count; k++)
+    {
+        if (strcmp(ext_info[k].id, "org.apache.harmony.vm.GetExtensionEnv") == 0)
+        {
+            get_ncai_func = ext_info[k].func;
+            break;
+        }
+    }
+
+    fprintf(stderr, "agent... \n");
+    if (get_ncai_func == NULL)
+    {
+        fprintf(stderr, "test_function: GetNCAIEnvironment() nas not been found among JVMTI extensions\n");
+        test = false;
+        return;
+    }
+
+    ncaiEnv* ncai_env = NULL;
+
+    fprintf(stderr, "agent... \n");
+    err = get_ncai_func(jvmti_env, &ncai_env, NCAI_VERSION_1_0);
+
+    if (err != JVMTI_ERROR_NONE)
+    {
+        fprintf(stderr, "test_function: get_ncai_func() returned error: %d, '%s'\n",
+            err, get_jvmti_eror_text(err));
+        test = false;
+        return;
+    }
+
+    if (ncai_env == NULL)
+    {
+        fprintf(stderr, "test_function: get_ncai_func() returned NULL environment\n");
+        test = false;
+        return;
+    }
+    fprintf(stderr, "agent... \n");
+    ///////////////////////////////////
+/*
+    fprintf(stderr, "calling ncai->GetThreadHandle()...\n");
+    ncai_err = ncai_env->GetThreadHandle(g_thread_jthread, &ncai_thread);
+    if (ncai_err != NCAI_ERROR_NONE)
+    {
+        fprintf(stderr, "ncai->GetThreadHandle() returned error: %d", ncai_err);
+        test = false;
+        return;
+    }
+*/
+    ncaiThread* threads;
+    jint threads_returned;
+
+    while(!g_resume_agent_thread)
+            SLEEP_UNIVERSAL(200);
+
+    g_resume_agent_thread = 0;
+
+    test = true;
+
+    ncai_err = ncai_env->GetAllThreads(&threads_returned, &threads);
+    if (ncai_err != NCAI_ERROR_NONE)
+    {
+        fprintf(stderr, "ncai->GetAllThreads() returned error: %d,\n", ncai_err);
+        test = false;
+        g_stop_thread = 1;
+        return;
+    }
+
+    int check = 0;
+    for(int h = 0; h < threads_returned; h++)
+    {
+        ncaiThreadInfo info;
+        ncai_err = ncai_env->GetThreadInfo(threads[h], &info);
+        if (ncai_err != NCAI_ERROR_NONE)
+        {
+            fprintf(stderr, "ncai->GetThreadInfo() returned error: %d,\n", ncai_err);
+            test = false;
+            g_stop_thread = 1;
+            return;
+        }
+        fprintf(stderr, "\nthreads: %d - %s(%d)",
+            h, info.name, info.kind);
+        if((strcmp(info.name, "java_thread1") == 0) ||
+            (strcmp(info.name, "java_thread2") == 0) ||
+            (strcmp(info.name, "java_thread3") == 0))
+        {
+            check++;
+            fprintf(stderr, " <--");
+        }
+    }
+
+    if(check != 3)
+        test = false;
+
+
+    g_stop_thread = 1;
+    SLEEP_UNIVERSAL(500);
+}
+
+void JNICALL callbackVMDeath(prms_VMDEATH)
+{
+    check_VMDEATH;
+    func_for_callback_VMDeath(jni_env, jvmti_env, test_case_name, test, util);
+}
+
+/* *********************************************************************** */

Propchange: harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllThreads/GetAllThreads01/GetAllThreads01.cpp
------------------------------------------------------------------------------
    svn:eol-style = native

Added: harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllThreads/GetAllThreads01/GetAllThreads01.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllThreads/GetAllThreads01/GetAllThreads01.java?rev=597138&view=auto
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllThreads/GetAllThreads01/GetAllThreads01.java (added)
+++ harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllThreads/GetAllThreads01/GetAllThreads01.java Wed Nov 21 08:29:40 2007
@@ -0,0 +1,68 @@
+package ncai.funcs;
+
+/**
+ * @author Petr Ivanov
+ * @version $Revision: 1.1.1.1 $
+ *
+ */
+public class GetAllThreads01 extends Thread{
+    public native void TestFunction();
+    public native void TestFunction1();
+    public static native boolean stopsignal();
+    public static native void resumeagent();
+
+    static boolean NoLibrary = false;
+    static {
+        try{
+            System.loadLibrary("GetAllThreads01");
+        }
+        catch(Throwable e){
+            NoLibrary = true;
+        }
+    }
+
+    GetAllThreads01(String name)
+    {
+        super(name);
+    }
+
+    static public void main(String args[]) {
+        if(NoLibrary) return;
+        new GetAllThreads01("java_thread1").start();
+        new GetAllThreads01("java_thread2").start();
+        new GetAllThreads01("java_thread3").start();
+        special_method();
+        return;
+    }
+
+    public void test_java_func1(){
+        System.out.println("thread - java func1\n");
+        TestFunction1();
+    }
+
+    public void test_java_func2(){
+        System.out.println("thread - java func2\n");
+        test_java_func3();
+    }
+
+    public void test_java_func3(){
+        System.out.println("thread - java func3\n");
+    }
+
+    static public void special_method() {
+        /*
+         * Transfer control to native part.
+         */
+        try {
+            throw new InterruptedException();
+        } catch (Throwable tex) { }
+        return;
+    }
+
+    public void run() {
+        System.out.println("thread - java run\n");
+        test_java_func1();
+    }
+}
+
+

Propchange: harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllThreads/GetAllThreads01/GetAllThreads01.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllThreads/GetAllThreads01n/GetAllThreads01n.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllThreads/GetAllThreads01n/GetAllThreads01n.cpp?rev=597138&view=auto
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllThreads/GetAllThreads01n/GetAllThreads01n.cpp (added)
+++ harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllThreads/GetAllThreads01n/GetAllThreads01n.cpp Wed Nov 21 08:29:40 2007
@@ -0,0 +1,289 @@
+/**
+ * @author Petr Ivanov
+ * @version $Revision: 1.1.1.1 $
+ *
+ */
+
+/* *********************************************************************** */
+
+#include "events.h"
+#include "utils.h"
+#include "ncai.h"
+
+#ifdef POSIX
+#include <stdlib.h>
+#include <time.h>
+#else
+#include <windows.h>
+#include <CRTDBG.H>
+#endif
+
+#ifdef POSIX
+#define SLEEP_UNIVERSAL(_x_)  { timespec delay = {(_x_)/1000, 1000000*((_x_)%1000)}; nanosleep(&delay, NULL); }
+#else // #ifdef POSIX
+#define SLEEP_UNIVERSAL(_x_)  Sleep((_x_))
+#endif // #ifdef POSIX
+
+static int g_stop_thread = 0;
+static int g_resume_agent_thread = 0;
+//static jthread g_thread_jthread;
+//static jthread g_agent_thread;
+
+static bool test = false;
+static bool util = false;
+static bool flag = false;
+
+const char test_case_name[] = "GetAllThreads01n";
+/*
+static void Test1(JNIEnv *env, jobject obj);
+static void Test2(JNIEnv *env, jobject obj);
+static void Test3(JNIEnv *env, jobject obj);
+//static void JNICALL test_function(jvmtiEnv*, JNIEnv*, void*);
+static  bool CheckFrames(ncaiEnv*, ncaiThread, ncaiFrameInfo**, jint*);*/
+
+extern "C" JNIEXPORT void JNICALL
+Java_ncai_funcs_GetAllThreads01n_resumeagent(JNIEnv *env, jclass cls)
+{
+    //warning fix
+    int w_fix = sizeof(cls);
+    w_fix += sizeof(env);
+    //
+
+    g_resume_agent_thread = 1;
+}
+
+extern "C" JNIEXPORT jboolean JNICALL
+Java_ncai_funcs_GetAllThreads01n_stopsignal(JNIEnv *env, jclass cls)
+{
+    //warning fix
+    int w_fix = sizeof(cls);
+    w_fix += sizeof(env);
+    //
+
+    return g_stop_thread ? true : false;
+}
+
+extern "C" JNIEXPORT void JNICALL Java_ncai_funcs_GetAllThreads01n_TestFunction1
+  (JNIEnv *env, jobject obj)
+{
+    //warning fix
+    int w_fix = sizeof(obj);
+    w_fix += sizeof(env);
+    //
+    fprintf(stderr, "thread - native TestFunction1\n");
+
+    g_resume_agent_thread = 1;
+    while(!g_stop_thread)
+    {
+        fprintf(stderr, "thread... \n");
+        SLEEP_UNIVERSAL(100);
+    }
+
+    return;
+}
+
+void JNICALL ThreadStart(jvmtiEnv *jvmti_env,
+            JNIEnv* jni_env,
+            jthread thread)
+{
+    //warning fix
+    int w_fix = 0;
+    w_fix += sizeof(jni_env);
+    //
+
+    jvmtiPhase phase;
+    jvmtiError result;
+    jvmtiThreadInfo tinfo;
+
+    result = jvmti_env->GetPhase(&phase);
+    if (result != JVMTI_ERROR_NONE || phase != JVMTI_PHASE_LIVE)
+        return;
+
+    result = jvmti_env->GetThreadInfo(thread, &tinfo);
+    if (result != JVMTI_ERROR_NONE)
+        return;
+
+    if (strcmp(tinfo.name, "java_thread") != 0)
+        return;
+
+    printf("ThreadStart: java_thread\n");
+//    g_thread_jthread = jni_env->NewGlobalRef(thread);
+/*
+    jclass clazz = jni_env->FindClass("java/lang/Thread");
+    if (!clazz)
+    {
+        fprintf(stderr, "\tnative: JNI: FindClass failed\n");
+        return;
+    }
+
+    jmethodID mid = jni_env->GetMethodID(clazz, "<init>", "()V");
+    if (!mid)
+    {
+        fprintf(stderr, "\tnative: JNI: GetMethodID failed\n");
+        return;
+    }
+
+    g_agent_thread = jni_env->NewObject(clazz, mid, "native_agent_thread");
+    if (!g_agent_thread)
+    {
+        fprintf(stderr, "\tnative: JNI: NewObject failed\n");
+        return;
+    }
+
+    g_agent_thread = jni_env->NewGlobalRef(g_agent_thread);
+    result = jvmti_env->GetThreadInfo(g_agent_thread, &tinfo);
+    if (result != JVMTI_ERROR_NONE)
+    {
+        fprintf(stderr, "\tnative: JNI: GetThreadInfo failed\n");
+    }
+
+    result = jvmti_env->RunAgentThread(g_agent_thread, test_function, NULL, JVMTI_THREAD_NORM_PRIORITY);
+    if (result != JVMTI_ERROR_NONE)
+    {
+        fprintf(stderr, "\tnative: jvmti: RunAgentThread failed\n");
+        return;
+    }*/
+}
+
+/* *********************************************************************** */
+
+JNIEXPORT jint JNICALL Agent_OnLoad(prms_AGENT_ONLOAD)
+{
+
+    Callbacks CB;
+    CB.cbThreadStart = &ThreadStart;
+    check_AGENT_ONLOAD;
+    jvmtiEvent events[] = { JVMTI_EVENT_EXCEPTION, JVMTI_EVENT_THREAD_START, JVMTI_EVENT_VM_DEATH };
+    cb_exc;
+    cb_death;
+    return func_for_Agent_OnLoad(vm, options, reserved, &CB,
+        events, sizeof(events)/sizeof(jvmtiEvent), test_case_name, DEBUG_OUT);
+}
+
+/* *********************************************************************** */
+
+void JNICALL callbackException(jvmtiEnv *jvmti_env, JNIEnv* jni_env,
+                               jthread thread, jmethodID method,
+                               jlocation location, jobject exception,
+                               jmethodID catch_method, jlocation catch_location)
+{
+    check_EXCPT;
+    if (flag) return;
+
+    /*
+     * Function separate all other exceptions in all other method
+     */
+    if (!check_phase_and_method_debug(jvmti_env, method, SPP_LIVE_ONLY,
+                "special_method", DEBUG_OUT)) return;
+
+    flag = true;
+    util = true;
+
+    fprintf(stderr, "agent... \n");
+    SLEEP_UNIVERSAL(300);
+    ////////////////////ncai env get
+    jvmtiError err;
+    ncaiError ncai_err;
+
+    jvmtiExtensionFunctionInfo* ext_info = NULL;
+    jint ext_count = 0;
+
+    err = jvmti_env->GetExtensionFunctions(&ext_count, &ext_info);
+
+    if (err != JVMTI_ERROR_NONE)
+    {
+        fprintf(stderr, "test_function: GetExtensionFunctions() returned error: %d, '%s'\n",
+            err, get_jvmti_eror_text(err));
+        test = false;
+        return;
+    }
+
+    fprintf(stderr, "agent... \n");
+    if (ext_count == 0 || ext_info == NULL)
+    {
+        fprintf(stderr, "test_function: GetExtensionFunctions() returned no extensions\n");
+        test = false;
+        return;
+    }
+
+    jvmtiExtensionFunction get_ncai_func = NULL;
+
+    fprintf(stderr, "agent... \n");
+    for (int k = 0; k < ext_count; k++)
+    {
+        if (strcmp(ext_info[k].id, "org.apache.harmony.vm.GetExtensionEnv") == 0)
+        {
+            get_ncai_func = ext_info[k].func;
+            break;
+        }
+    }
+
+    fprintf(stderr, "agent... \n");
+    if (get_ncai_func == NULL)
+    {
+        fprintf(stderr, "test_function: GetNCAIEnvironment() nas not been found among JVMTI extensions\n");
+        test = false;
+        return;
+    }
+
+    ncaiEnv* ncai_env = NULL;
+
+    fprintf(stderr, "agent... \n");
+    err = get_ncai_func(jvmti_env, &ncai_env, NCAI_VERSION_1_0);
+
+    if (err != JVMTI_ERROR_NONE)
+    {
+        fprintf(stderr, "test_function: get_ncai_func() returned error: %d, '%s'\n",
+            err, get_jvmti_eror_text(err));
+        test = false;
+        return;
+    }
+
+    if (ncai_env == NULL)
+    {
+        fprintf(stderr, "test_function: get_ncai_func() returned NULL environment\n");
+        test = false;
+        return;
+    }
+    fprintf(stderr, "agent... \n");
+    ///////////////////////////////////
+/*
+    fprintf(stderr, "calling ncai->GetThreadHandle()...\n");
+    ncai_err = ncai_env->GetThreadHandle(g_thread_jthread, &ncai_thread);
+    if (ncai_err != NCAI_ERROR_NONE)
+    {
+        fprintf(stderr, "ncai->GetThreadHandle() returned error: %d", ncai_err);
+        test = false;
+        return;
+    }
+*/
+    jint threads_returned;
+
+    while(!g_resume_agent_thread)
+            SLEEP_UNIVERSAL(200);
+
+    g_resume_agent_thread = 0;
+
+    test = true;
+
+    ncai_err = ncai_env->GetAllThreads(&threads_returned, NULL);
+    if (ncai_err != NCAI_ERROR_NULL_POINTER)
+    {
+        fprintf(stderr, "ncai->GetAllThreads() returned invalid error: %d,\n", ncai_err);
+        test = false;
+        g_stop_thread = 1;
+        return;
+    }
+
+    g_stop_thread = 1;
+    SLEEP_UNIVERSAL(500);
+}
+
+void JNICALL callbackVMDeath(prms_VMDEATH)
+{
+    check_VMDEATH;
+    func_for_callback_VMDeath(jni_env, jvmti_env, test_case_name, test, util);
+}
+
+/* *********************************************************************** */
+

Propchange: harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllThreads/GetAllThreads01n/GetAllThreads01n.cpp
------------------------------------------------------------------------------
    svn:eol-style = native

Added: harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllThreads/GetAllThreads01n/GetAllThreads01n.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllThreads/GetAllThreads01n/GetAllThreads01n.java?rev=597138&view=auto
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllThreads/GetAllThreads01n/GetAllThreads01n.java (added)
+++ harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllThreads/GetAllThreads01n/GetAllThreads01n.java Wed Nov 21 08:29:40 2007
@@ -0,0 +1,68 @@
+package ncai.funcs;
+
+/**
+ * @author Petr Ivanov
+ * @version $Revision: 1.1.1.1 $
+ *
+ */
+public class GetAllThreads01n extends Thread{
+    public native void TestFunction();
+    public native void TestFunction1();
+    public static native boolean stopsignal();
+    public static native void resumeagent();
+
+    static boolean NoLibrary = false;
+    static {
+        try{
+            System.loadLibrary("GetAllThreads01n");
+        }
+        catch(Throwable e){
+            NoLibrary = true;
+        }
+    }
+
+    GetAllThreads01n(String name)
+    {
+        super(name);
+    }
+
+    static public void main(String args[]) {
+        if(NoLibrary) return;
+        new GetAllThreads01n("java_thread1").start();
+        new GetAllThreads01n("java_thread2").start();
+        new GetAllThreads01n("java_thread3").start();
+        special_method();
+        return;
+    }
+
+    public void test_java_func1(){
+        System.out.println("thread - java func1\n");
+        TestFunction1();
+    }
+
+    public void test_java_func2(){
+        System.out.println("thread - java func2\n");
+        test_java_func3();
+    }
+
+    public void test_java_func3(){
+        System.out.println("thread - java func3\n");
+    }
+
+    static public void special_method() {
+        /*
+         * Transfer control to native part.
+         */
+        try {
+            throw new InterruptedException();
+        } catch (Throwable tex) { }
+        return;
+    }
+
+    public void run() {
+        System.out.println("thread - java run\n");
+        test_java_func1();
+    }
+}
+
+

Propchange: harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllThreads/GetAllThreads01n/GetAllThreads01n.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllThreads/GetAllThreads02/GetAllThreads02.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllThreads/GetAllThreads02/GetAllThreads02.cpp?rev=597138&view=auto
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllThreads/GetAllThreads02/GetAllThreads02.cpp (added)
+++ harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllThreads/GetAllThreads02/GetAllThreads02.cpp Wed Nov 21 08:29:40 2007
@@ -0,0 +1,370 @@
+/**
+ * @author Petr Ivanov
+ * @version $Revision: 1.1.1.1 $
+ *
+ */
+
+/* *********************************************************************** */
+
+#include "events.h"
+#include "utils.h"
+#include "ncai.h"
+
+#ifdef POSIX
+#include <stdlib.h>
+#include <time.h>
+#else
+#include <windows.h>
+#include <CRTDBG.H>
+#endif
+
+#ifdef POSIX
+#define SLEEP_UNIVERSAL(_x_)  { timespec delay = {(_x_)/1000, 1000000*((_x_)%1000)}; nanosleep(&delay, NULL); }
+#else // #ifdef POSIX
+#define SLEEP_UNIVERSAL(_x_)  Sleep((_x_))
+#endif // #ifdef POSIX
+
+static int g_stop_thread = 0;
+static int g_resume_agent_thread = 0;
+//static jthread g_thread_jthread;
+//static jthread g_agent_thread;
+
+static bool test = false;
+static bool util = false;
+static bool flag = false;
+
+const char test_case_name[] = "GetAllThreads02";
+/*
+static void Test1(JNIEnv *env, jobject obj);
+static void Test2(JNIEnv *env, jobject obj);
+static void Test3(JNIEnv *env, jobject obj);
+//static void JNICALL test_function(jvmtiEnv*, JNIEnv*, void*);
+static  bool CheckFrames(ncaiEnv*, ncaiThread, ncaiFrameInfo**, jint*);*/
+
+extern "C" JNIEXPORT void JNICALL
+Java_ncai_funcs_GetAllThreads02_resumeagent(JNIEnv *env, jclass cls)
+{
+    //warning fix
+    int w_fix = sizeof(cls);
+    w_fix += sizeof(env);
+    //
+
+    g_resume_agent_thread = 1;
+}
+
+extern "C" JNIEXPORT jboolean JNICALL
+Java_ncai_funcs_GetAllThreads02_stopsignal(JNIEnv *env, jclass cls)
+{
+    //warning fix
+    int w_fix = sizeof(cls);
+    w_fix += sizeof(env);
+    //
+
+    return g_stop_thread ? true : false;
+}
+
+extern "C" JNIEXPORT void JNICALL Java_ncai_funcs_GetAllThreads02_TestFunction1
+  (JNIEnv *env, jobject obj)
+{
+    //warning fix
+    int w_fix = sizeof(obj);
+    w_fix += sizeof(env);
+    //
+    fprintf(stderr, "thread - native TestFunction1\n");
+
+    g_resume_agent_thread = 1;
+    while(!g_stop_thread)
+    {
+        fprintf(stderr, "thread... \n");
+        SLEEP_UNIVERSAL(100);
+    }
+
+    return;
+}
+
+void JNICALL ThreadStart(jvmtiEnv *jvmti_env,
+            JNIEnv* jni_env,
+            jthread thread)
+{
+    //warning fix
+    int w_fix = 0;
+    w_fix += sizeof(jni_env);
+    //
+
+    jvmtiPhase phase;
+    jvmtiError result;
+    jvmtiThreadInfo tinfo;
+
+    result = jvmti_env->GetPhase(&phase);
+    if (result != JVMTI_ERROR_NONE || phase != JVMTI_PHASE_LIVE)
+        return;
+
+    result = jvmti_env->GetThreadInfo(thread, &tinfo);
+    if (result != JVMTI_ERROR_NONE)
+        return;
+
+    if (strcmp(tinfo.name, "java_thread") != 0)
+        return;
+
+    printf("ThreadStart: java_thread\n");
+//    g_thread_jthread = jni_env->NewGlobalRef(thread);
+/*
+    jclass clazz = jni_env->FindClass("java/lang/Thread");
+    if (!clazz)
+    {
+        fprintf(stderr, "\tnative: JNI: FindClass failed\n");
+        return;
+    }
+
+    jmethodID mid = jni_env->GetMethodID(clazz, "<init>", "()V");
+    if (!mid)
+    {
+        fprintf(stderr, "\tnative: JNI: GetMethodID failed\n");
+        return;
+    }
+
+    g_agent_thread = jni_env->NewObject(clazz, mid, "native_agent_thread");
+    if (!g_agent_thread)
+    {
+        fprintf(stderr, "\tnative: JNI: NewObject failed\n");
+        return;
+    }
+
+    g_agent_thread = jni_env->NewGlobalRef(g_agent_thread);
+    result = jvmti_env->GetThreadInfo(g_agent_thread, &tinfo);
+    if (result != JVMTI_ERROR_NONE)
+    {
+        fprintf(stderr, "\tnative: JNI: GetThreadInfo failed\n");
+    }
+
+    result = jvmti_env->RunAgentThread(g_agent_thread, test_function, NULL, JVMTI_THREAD_NORM_PRIORITY);
+    if (result != JVMTI_ERROR_NONE)
+    {
+        fprintf(stderr, "\tnative: jvmti: RunAgentThread failed\n");
+        return;
+    }*/
+}
+
+/* *********************************************************************** */
+
+JNIEXPORT jint JNICALL Agent_OnLoad(prms_AGENT_ONLOAD)
+{
+
+    Callbacks CB;
+    CB.cbThreadStart = &ThreadStart;
+    check_AGENT_ONLOAD;
+    jvmtiEvent events[] = { JVMTI_EVENT_EXCEPTION, JVMTI_EVENT_THREAD_START, JVMTI_EVENT_VM_DEATH };
+    cb_exc;
+    cb_death;
+    return func_for_Agent_OnLoad(vm, options, reserved, &CB,
+        events, sizeof(events)/sizeof(jvmtiEvent), test_case_name, DEBUG_OUT);
+}
+
+/* *********************************************************************** */
+
+void JNICALL callbackException(jvmtiEnv *jvmti_env, JNIEnv* jni_env,
+                               jthread thread, jmethodID method,
+                               jlocation location, jobject exception,
+                               jmethodID catch_method, jlocation catch_location)
+{
+    check_EXCPT;
+    if (flag) return;
+
+    /*
+     * Function separate all other exceptions in all other method
+     */
+    if (!check_phase_and_method_debug(jvmti_env, method, SPP_LIVE_ONLY,
+                "special_method", DEBUG_OUT)) return;
+
+    flag = true;
+    util = true;
+
+    fprintf(stderr, "agent... \n");
+    SLEEP_UNIVERSAL(300);
+    ////////////////////ncai env get
+    jvmtiError err;
+    ncaiError ncai_err;
+
+    jvmtiExtensionFunctionInfo* ext_info = NULL;
+    jint ext_count = 0;
+
+    err = jvmti_env->GetExtensionFunctions(&ext_count, &ext_info);
+
+    if (err != JVMTI_ERROR_NONE)
+    {
+        fprintf(stderr, "test_function: GetExtensionFunctions() returned error: %d, '%s'\n",
+            err, get_jvmti_eror_text(err));
+        test = false;
+        return;
+    }
+
+    fprintf(stderr, "agent... \n");
+    if (ext_count == 0 || ext_info == NULL)
+    {
+        fprintf(stderr, "test_function: GetExtensionFunctions() returned no extensions\n");
+        test = false;
+        return;
+    }
+
+    jvmtiExtensionFunction get_ncai_func = NULL;
+
+    fprintf(stderr, "agent... \n");
+    for (int k = 0; k < ext_count; k++)
+    {
+        if (strcmp(ext_info[k].id, "org.apache.harmony.vm.GetExtensionEnv") == 0)
+        {
+            get_ncai_func = ext_info[k].func;
+            break;
+        }
+    }
+
+    fprintf(stderr, "agent... \n");
+    if (get_ncai_func == NULL)
+    {
+        fprintf(stderr, "test_function: GetNCAIEnvironment() nas not been found among JVMTI extensions\n");
+        test = false;
+        return;
+    }
+
+    ncaiEnv* ncai_env = NULL;
+
+    fprintf(stderr, "agent... \n");
+    err = get_ncai_func(jvmti_env, &ncai_env, NCAI_VERSION_1_0);
+
+    if (err != JVMTI_ERROR_NONE)
+    {
+        fprintf(stderr, "test_function: get_ncai_func() returned error: %d, '%s'\n",
+            err, get_jvmti_eror_text(err));
+        test = false;
+        return;
+    }
+
+    if (ncai_env == NULL)
+    {
+        fprintf(stderr, "test_function: get_ncai_func() returned NULL environment\n");
+        test = false;
+        return;
+    }
+    fprintf(stderr, "agent... \n");
+    ///////////////////////////////////
+/*
+    fprintf(stderr, "calling ncai->GetThreadHandle()...\n");
+    ncai_err = ncai_env->GetThreadHandle(g_thread_jthread, &ncai_thread);
+    if (ncai_err != NCAI_ERROR_NONE)
+    {
+        fprintf(stderr, "ncai->GetThreadHandle() returned error: %d", ncai_err);
+        test = false;
+        return;
+    }
+*/
+    ncaiThread* threads;
+    jint threads_returned;
+
+    while(!g_resume_agent_thread)
+            SLEEP_UNIVERSAL(200);
+
+    g_resume_agent_thread = 0;
+
+    test = true;
+
+    ncai_err = ncai_env->GetAllThreads(&threads_returned, &threads);
+    if (ncai_err != NCAI_ERROR_NONE)
+    {
+        fprintf(stderr, "ncai->GetAllThreads() returned error: %d,\n", ncai_err);
+        test = false;
+        g_stop_thread = 1;
+        return;
+    }
+
+    int check = 0;
+    ncaiThread j_threads[3];
+    ncaiThreadInfo j_info[3];
+    for(int h = 0; h < threads_returned; h++)
+    {
+        ncaiThreadInfo info;
+        ncai_err = ncai_env->GetThreadInfo(threads[h], &info);
+        if (ncai_err != NCAI_ERROR_NONE)
+        {
+            fprintf(stderr, "ncai->GetThreadInfo() returned error: %d,\n", ncai_err);
+            test = false;
+            g_stop_thread = 1;
+            return;
+        }
+        fprintf(stderr, "\nthreads: %d - %s(%d)",
+            h, info.name, info.kind);
+        if((strcmp(info.name, "java_thread1") == 0) ||
+            (strcmp(info.name, "java_thread2") == 0) ||
+            (strcmp(info.name, "java_thread3") == 0))
+        {
+            j_threads[check] = threads[h];
+            j_info[check] = info;
+            check++;
+            fprintf(stderr, " <--");
+        }
+    }
+
+    if(check != 3)
+        test = false;
+
+    fprintf(stderr, "\n-----");
+
+    for(int g = 0; g < 3; g++)
+    {
+        ncai_err = ncai_env->SuspendThread(j_threads[g]);
+        if (ncai_err != NCAI_ERROR_NONE)
+        {
+            fprintf(stderr, "ncai->SuspendThread() returned error: %d,\n", ncai_err);
+            test = false;
+            g_stop_thread = 1;
+            return;
+        }
+
+        fprintf(stderr, "\nthreads: %d - %s(%d) suspended",
+                g, j_info[g].name, j_info[g].kind);
+    }
+
+    fprintf(stderr, "\n-----");
+
+    for(int l = 0; l < threads_returned; l++)
+    {
+        ncaiThreadInfo info;
+        ncai_err = ncai_env->GetThreadInfo(threads[l], &info);
+        if (ncai_err != NCAI_ERROR_NONE)
+        {
+            fprintf(stderr, "ncai->GetThreadInfo() returned error: %d,\n", ncai_err);
+            test = false;
+            g_stop_thread = 1;
+            return;
+        }
+        fprintf(stderr, "\nthreads: %d - %s(%d)",
+            l, info.name, info.kind);
+    }
+
+    fprintf(stderr, "\n-----");
+
+    for(int j = 0; j < 3; j++)
+    {
+        ncai_err = ncai_env->ResumeThread(j_threads[j]);
+        if (ncai_err != NCAI_ERROR_NONE)
+        {
+            fprintf(stderr, "ncai->ResumeThread() returned error: %d,\n", ncai_err);
+            test = false;
+            g_stop_thread = 1;
+            return;
+        }
+
+        fprintf(stderr, "\nthreads: %d - %s(%d) resumed",
+                j, j_info[j].name, j_info[j].kind);
+    }
+
+    g_stop_thread = 1;
+    SLEEP_UNIVERSAL(500);
+}
+
+void JNICALL callbackVMDeath(prms_VMDEATH)
+{
+    check_VMDEATH;
+    func_for_callback_VMDeath(jni_env, jvmti_env, test_case_name, test, util);
+}
+
+/* *********************************************************************** */

Propchange: harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllThreads/GetAllThreads02/GetAllThreads02.cpp
------------------------------------------------------------------------------
    svn:eol-style = native

Added: harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllThreads/GetAllThreads02/GetAllThreads02.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllThreads/GetAllThreads02/GetAllThreads02.java?rev=597138&view=auto
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllThreads/GetAllThreads02/GetAllThreads02.java (added)
+++ harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllThreads/GetAllThreads02/GetAllThreads02.java Wed Nov 21 08:29:40 2007
@@ -0,0 +1,68 @@
+package ncai.funcs;
+
+/**
+ * @author Petr Ivanov
+ * @version $Revision: 1.1.1.1 $
+ *
+ */
+public class GetAllThreads02 extends Thread{
+    public native void TestFunction();
+    public native void TestFunction1();
+    public static native boolean stopsignal();
+    public static native void resumeagent();
+
+    static boolean NoLibrary = false;
+    static {
+        try{
+            System.loadLibrary("GetAllThreads02");
+        }
+        catch(Throwable e){
+            NoLibrary = true;
+        }
+    }
+
+    GetAllThreads02(String name)
+    {
+        super(name);
+    }
+
+    static public void main(String args[]) {
+        if(NoLibrary) return;
+        new GetAllThreads02("java_thread1").start();
+        new GetAllThreads02("java_thread2").start();
+        new GetAllThreads02("java_thread3").start();
+        special_method();
+        return;
+    }
+
+    public void test_java_func1(){
+        System.out.println("thread - java func1\n");
+        TestFunction1();
+    }
+
+    public void test_java_func2(){
+        System.out.println("thread - java func2\n");
+        test_java_func3();
+    }
+
+    public void test_java_func3(){
+        System.out.println("thread - java func3\n");
+    }
+
+    static public void special_method() {
+        /*
+         * Transfer control to native part.
+         */
+        try {
+            throw new InterruptedException();
+        } catch (Throwable tex) { }
+        return;
+    }
+
+    public void run() {
+        System.out.println("thread - java run\n");
+        test_java_func1();
+    }
+}
+
+

Propchange: harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllThreads/GetAllThreads02/GetAllThreads02.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllThreads/GetAllThreads02n/GetAllThreads02n.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllThreads/GetAllThreads02n/GetAllThreads02n.cpp?rev=597138&view=auto
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllThreads/GetAllThreads02n/GetAllThreads02n.cpp (added)
+++ harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllThreads/GetAllThreads02n/GetAllThreads02n.cpp Wed Nov 21 08:29:40 2007
@@ -0,0 +1,289 @@
+/**
+ * @author Petr Ivanov
+ * @version $Revision: 1.1.1.1 $
+ *
+ */
+
+/* *********************************************************************** */
+
+#include "events.h"
+#include "utils.h"
+#include "ncai.h"
+
+#ifdef POSIX
+#include <stdlib.h>
+#include <time.h>
+#else
+#include <windows.h>
+#include <CRTDBG.H>
+#endif
+
+#ifdef POSIX
+#define SLEEP_UNIVERSAL(_x_)  { timespec delay = {(_x_)/1000, 1000000*((_x_)%1000)}; nanosleep(&delay, NULL); }
+#else // #ifdef POSIX
+#define SLEEP_UNIVERSAL(_x_)  Sleep((_x_))
+#endif // #ifdef POSIX
+
+static int g_stop_thread = 0;
+static int g_resume_agent_thread = 0;
+//static jthread g_thread_jthread;
+//static jthread g_agent_thread;
+
+static bool test = false;
+static bool util = false;
+static bool flag = false;
+
+const char test_case_name[] = "GetAllThreads02n";
+/*
+static void Test1(JNIEnv *env, jobject obj);
+static void Test2(JNIEnv *env, jobject obj);
+static void Test3(JNIEnv *env, jobject obj);
+//static void JNICALL test_function(jvmtiEnv*, JNIEnv*, void*);
+static  bool CheckFrames(ncaiEnv*, ncaiThread, ncaiFrameInfo**, jint*);*/
+
+extern "C" JNIEXPORT void JNICALL
+Java_ncai_funcs_GetAllThreads02n_resumeagent(JNIEnv *env, jclass cls)
+{
+    //warning fix
+    int w_fix = sizeof(cls);
+    w_fix += sizeof(env);
+    //
+
+    g_resume_agent_thread = 1;
+}
+
+extern "C" JNIEXPORT jboolean JNICALL
+Java_ncai_funcs_GetAllThreads02n_stopsignal(JNIEnv *env, jclass cls)
+{
+    //warning fix
+    int w_fix = sizeof(cls);
+    w_fix += sizeof(env);
+    //
+
+    return g_stop_thread ? true : false;
+}
+
+extern "C" JNIEXPORT void JNICALL Java_ncai_funcs_GetAllThreads02n_TestFunction1
+  (JNIEnv *env, jobject obj)
+{
+    //warning fix
+    int w_fix = sizeof(obj);
+    w_fix += sizeof(env);
+    //
+    fprintf(stderr, "thread - native TestFunction1\n");
+
+    g_resume_agent_thread = 1;
+    while(!g_stop_thread)
+    {
+        fprintf(stderr, "thread... \n");
+        SLEEP_UNIVERSAL(100);
+    }
+
+    return;
+}
+
+void JNICALL ThreadStart(jvmtiEnv *jvmti_env,
+            JNIEnv* jni_env,
+            jthread thread)
+{
+    //warning fix
+    int w_fix = 0;
+    w_fix += sizeof(jni_env);
+    //
+
+    jvmtiPhase phase;
+    jvmtiError result;
+    jvmtiThreadInfo tinfo;
+
+    result = jvmti_env->GetPhase(&phase);
+    if (result != JVMTI_ERROR_NONE || phase != JVMTI_PHASE_LIVE)
+        return;
+
+    result = jvmti_env->GetThreadInfo(thread, &tinfo);
+    if (result != JVMTI_ERROR_NONE)
+        return;
+
+    if (strcmp(tinfo.name, "java_thread") != 0)
+        return;
+
+    printf("ThreadStart: java_thread\n");
+//    g_thread_jthread = jni_env->NewGlobalRef(thread);
+/*
+    jclass clazz = jni_env->FindClass("java/lang/Thread");
+    if (!clazz)
+    {
+        fprintf(stderr, "\tnative: JNI: FindClass failed\n");
+        return;
+    }
+
+    jmethodID mid = jni_env->GetMethodID(clazz, "<init>", "()V");
+    if (!mid)
+    {
+        fprintf(stderr, "\tnative: JNI: GetMethodID failed\n");
+        return;
+    }
+
+    g_agent_thread = jni_env->NewObject(clazz, mid, "native_agent_thread");
+    if (!g_agent_thread)
+    {
+        fprintf(stderr, "\tnative: JNI: NewObject failed\n");
+        return;
+    }
+
+    g_agent_thread = jni_env->NewGlobalRef(g_agent_thread);
+    result = jvmti_env->GetThreadInfo(g_agent_thread, &tinfo);
+    if (result != JVMTI_ERROR_NONE)
+    {
+        fprintf(stderr, "\tnative: JNI: GetThreadInfo failed\n");
+    }
+
+    result = jvmti_env->RunAgentThread(g_agent_thread, test_function, NULL, JVMTI_THREAD_NORM_PRIORITY);
+    if (result != JVMTI_ERROR_NONE)
+    {
+        fprintf(stderr, "\tnative: jvmti: RunAgentThread failed\n");
+        return;
+    }*/
+}
+
+/* *********************************************************************** */
+
+JNIEXPORT jint JNICALL Agent_OnLoad(prms_AGENT_ONLOAD)
+{
+
+    Callbacks CB;
+    CB.cbThreadStart = &ThreadStart;
+    check_AGENT_ONLOAD;
+    jvmtiEvent events[] = { JVMTI_EVENT_EXCEPTION, JVMTI_EVENT_THREAD_START, JVMTI_EVENT_VM_DEATH };
+    cb_exc;
+    cb_death;
+    return func_for_Agent_OnLoad(vm, options, reserved, &CB,
+        events, sizeof(events)/sizeof(jvmtiEvent), test_case_name, DEBUG_OUT);
+}
+
+/* *********************************************************************** */
+
+void JNICALL callbackException(jvmtiEnv *jvmti_env, JNIEnv* jni_env,
+                               jthread thread, jmethodID method,
+                               jlocation location, jobject exception,
+                               jmethodID catch_method, jlocation catch_location)
+{
+    check_EXCPT;
+    if (flag) return;
+
+    /*
+     * Function separate all other exceptions in all other method
+     */
+    if (!check_phase_and_method_debug(jvmti_env, method, SPP_LIVE_ONLY,
+                "special_method", DEBUG_OUT)) return;
+
+    flag = true;
+    util = true;
+
+    fprintf(stderr, "agent... \n");
+    SLEEP_UNIVERSAL(300);
+    ////////////////////ncai env get
+    jvmtiError err;
+    ncaiError ncai_err;
+
+    jvmtiExtensionFunctionInfo* ext_info = NULL;
+    jint ext_count = 0;
+
+    err = jvmti_env->GetExtensionFunctions(&ext_count, &ext_info);
+
+    if (err != JVMTI_ERROR_NONE)
+    {
+        fprintf(stderr, "test_function: GetExtensionFunctions() returned error: %d, '%s'\n",
+            err, get_jvmti_eror_text(err));
+        test = false;
+        return;
+    }
+
+    fprintf(stderr, "agent... \n");
+    if (ext_count == 0 || ext_info == NULL)
+    {
+        fprintf(stderr, "test_function: GetExtensionFunctions() returned no extensions\n");
+        test = false;
+        return;
+    }
+
+    jvmtiExtensionFunction get_ncai_func = NULL;
+
+    fprintf(stderr, "agent... \n");
+    for (int k = 0; k < ext_count; k++)
+    {
+        if (strcmp(ext_info[k].id, "org.apache.harmony.vm.GetExtensionEnv") == 0)
+        {
+            get_ncai_func = ext_info[k].func;
+            break;
+        }
+    }
+
+    fprintf(stderr, "agent... \n");
+    if (get_ncai_func == NULL)
+    {
+        fprintf(stderr, "test_function: GetNCAIEnvironment() nas not been found among JVMTI extensions\n");
+        test = false;
+        return;
+    }
+
+    ncaiEnv* ncai_env = NULL;
+
+    fprintf(stderr, "agent... \n");
+    err = get_ncai_func(jvmti_env, &ncai_env, NCAI_VERSION_1_0);
+
+    if (err != JVMTI_ERROR_NONE)
+    {
+        fprintf(stderr, "test_function: get_ncai_func() returned error: %d, '%s'\n",
+            err, get_jvmti_eror_text(err));
+        test = false;
+        return;
+    }
+
+    if (ncai_env == NULL)
+    {
+        fprintf(stderr, "test_function: get_ncai_func() returned NULL environment\n");
+        test = false;
+        return;
+    }
+    fprintf(stderr, "agent... \n");
+    ///////////////////////////////////
+/*
+    fprintf(stderr, "calling ncai->GetThreadHandle()...\n");
+    ncai_err = ncai_env->GetThreadHandle(g_thread_jthread, &ncai_thread);
+    if (ncai_err != NCAI_ERROR_NONE)
+    {
+        fprintf(stderr, "ncai->GetThreadHandle() returned error: %d", ncai_err);
+        test = false;
+        return;
+    }
+*/
+    ncaiThread* threads;
+
+    while(!g_resume_agent_thread)
+            SLEEP_UNIVERSAL(200);
+
+    g_resume_agent_thread = 0;
+
+    test = true;
+
+    ncai_err = ncai_env->GetAllThreads(NULL, &threads);
+    if (ncai_err != NCAI_ERROR_NULL_POINTER)
+    {
+        fprintf(stderr, "ncai->GetAllThreads() returned invalid error: %d,\n", ncai_err);
+        test = false;
+        g_stop_thread = 1;
+        return;
+    }
+
+    g_stop_thread = 1;
+    SLEEP_UNIVERSAL(500);
+}
+
+void JNICALL callbackVMDeath(prms_VMDEATH)
+{
+    check_VMDEATH;
+    func_for_callback_VMDeath(jni_env, jvmti_env, test_case_name, test, util);
+}
+
+/* *********************************************************************** */
+

Propchange: harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllThreads/GetAllThreads02n/GetAllThreads02n.cpp
------------------------------------------------------------------------------
    svn:eol-style = native

Added: harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllThreads/GetAllThreads02n/GetAllThreads02n.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllThreads/GetAllThreads02n/GetAllThreads02n.java?rev=597138&view=auto
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllThreads/GetAllThreads02n/GetAllThreads02n.java (added)
+++ harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllThreads/GetAllThreads02n/GetAllThreads02n.java Wed Nov 21 08:29:40 2007
@@ -0,0 +1,68 @@
+package ncai.funcs;
+
+/**
+ * @author Petr Ivanov
+ * @version $Revision: 1.1.1.1 $
+ *
+ */
+public class GetAllThreads02n extends Thread{
+    public native void TestFunction();
+    public native void TestFunction1();
+    public static native boolean stopsignal();
+    public static native void resumeagent();
+
+    static boolean NoLibrary = false;
+    static {
+        try{
+            System.loadLibrary("GetAllThreads02n");
+        }
+        catch(Throwable e){
+            NoLibrary = true;
+        }
+    }
+
+    GetAllThreads02n(String name)
+    {
+        super(name);
+    }
+
+    static public void main(String args[]) {
+        if(NoLibrary) return;
+        new GetAllThreads02n("java_thread1").start();
+        new GetAllThreads02n("java_thread2").start();
+        new GetAllThreads02n("java_thread3").start();
+        special_method();
+        return;
+    }
+
+    public void test_java_func1(){
+        System.out.println("thread - java func1\n");
+        TestFunction1();
+    }
+
+    public void test_java_func2(){
+        System.out.println("thread - java func2\n");
+        test_java_func3();
+    }
+
+    public void test_java_func3(){
+        System.out.println("thread - java func3\n");
+    }
+
+    static public void special_method() {
+        /*
+         * Transfer control to native part.
+         */
+        try {
+            throw new InterruptedException();
+        } catch (Throwable tex) { }
+        return;
+    }
+
+    public void run() {
+        System.out.println("thread - java run\n");
+        test_java_func1();
+    }
+}
+
+

Propchange: harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetAllThreads/GetAllThreads02n/GetAllThreads02n.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetFrameCount/GetFrameCount01/GetFrameCount01.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetFrameCount/GetFrameCount01/GetFrameCount01.cpp?rev=597138&view=auto
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetFrameCount/GetFrameCount01/GetFrameCount01.cpp (added)
+++ harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetFrameCount/GetFrameCount01/GetFrameCount01.cpp Wed Nov 21 08:29:40 2007
@@ -0,0 +1,426 @@
+/**
+ * @author Petr Ivanov
+ * @version $Revision: 1.1.1.1 $
+ *
+ */
+
+/* *********************************************************************** */
+
+#include "events.h"
+#include "utils.h"
+#include "ncai.h"
+
+#ifdef POSIX
+#include <stdlib.h>
+#include <time.h>
+#else
+#include <windows.h>
+#include <CRTDBG.H>
+#endif
+
+#ifdef POSIX
+#define SLEEP_UNIVERSAL(_x_)  { timespec delay = {(_x_)/1000, 1000000*((_x_)%1000)}; nanosleep(&delay, NULL); }
+#else // #ifdef POSIX
+#define SLEEP_UNIVERSAL(_x_)  Sleep((_x_))
+#endif // #ifdef POSIX
+
+static int g_stop_thread = 0;
+static int g_resume_agent_thread = 0;
+static jthread g_thread_jthread;
+//static jthread g_agent_thread;
+
+static volatile int no_opt = 1; //used to prevent inlining;
+
+static bool test = false;
+static bool util = false;
+static bool flag = false;
+
+const char test_case_name[] = "GetFrameCount01";
+
+static void Test1(JNIEnv *env, jobject obj);
+static void Test2(JNIEnv *env, jobject obj);
+static void Test3(JNIEnv *env, jobject obj);
+//static void JNICALL test_function(jvmtiEnv*, JNIEnv*, void*);
+static  bool CheckFrames(ncaiEnv*, ncaiThread, ncaiFrameInfo**, jint*);
+
+extern "C" JNIEXPORT jboolean JNICALL
+Java_ncai_funcs_GetFrameCount01_stopsignal(JNIEnv *env, jclass cls)
+{
+    //warning fix
+    int w_fix = sizeof(cls);
+    w_fix += sizeof(env);
+    //
+
+    return g_stop_thread ? true : false;
+}
+
+extern "C" JNIEXPORT void JNICALL Java_ncai_funcs_GetFrameCount01_TestFunction
+  (JNIEnv *env, jobject obj)
+{
+    fprintf(stderr, "thread - native TestFunction\n");
+
+    jclass clazz = env->GetObjectClass(obj);
+    if (!clazz)
+    {
+        fprintf(stderr, "\tnative: native TestFunction: GetObjectClass failed\n");
+        return;
+    }
+
+    jmethodID mid = env->GetMethodID(clazz, "test_java_func2", "()V");
+    if (!mid)
+    {
+        fprintf(stderr, "\tnative: native TestFunction: GetStaticMethodID for 'test_java_func2' failed\n");
+        return;
+    }
+    env->CallVoidMethod(obj, mid);
+    return;
+}
+
+extern "C" JNIEXPORT void JNICALL Java_ncai_funcs_GetFrameCount01_TestFunction1
+  (JNIEnv *env, jobject obj)
+{
+    fprintf(stderr, "thread - native TestFunction1\n");
+    Test1(env, obj);
+
+    jclass clazz = env->GetObjectClass(obj);
+    if (!clazz)
+    {
+        fprintf(stderr, "\tnative: native TestFunction1: GetObjectClass failed\n");
+        return;
+    }
+
+    jmethodID mid = env->GetStaticMethodID(clazz, "sleep", "(J)V");
+    if (!mid)
+    {
+        fprintf(stderr, "\tnative: native TestFunction1: GetStaticMethodID for 'sleep' failed\n");
+        return;
+    }
+
+    g_resume_agent_thread = 1;
+    while(g_stop_thread)
+    {
+        fprintf(stderr, "thread... \n");
+        SLEEP_UNIVERSAL(100);
+//        env->CallStaticVoidMethod(clazz, mid, 500);
+    }
+
+    return;
+}
+
+void JNICALL ThreadStart(jvmtiEnv *jvmti_env,
+            JNIEnv* jni_env,
+            jthread thread)
+{
+    jvmtiPhase phase;
+    jvmtiError result;
+    jvmtiThreadInfo tinfo;
+
+    result = jvmti_env->GetPhase(&phase);
+    if (result != JVMTI_ERROR_NONE || phase != JVMTI_PHASE_LIVE)
+        return;
+
+    result = jvmti_env->GetThreadInfo(thread, &tinfo);
+    if (result != JVMTI_ERROR_NONE)
+        return;
+
+    if (strcmp(tinfo.name, "java_thread") != 0)
+        return;
+
+    printf("ThreadStart: java_thread\n");
+    g_thread_jthread = jni_env->NewGlobalRef(thread);
+/*
+    jclass clazz = jni_env->FindClass("java/lang/Thread");
+    if (!clazz)
+    {
+        fprintf(stderr, "\tnative: JNI: FindClass failed\n");
+        return;
+    }
+
+    jmethodID mid = jni_env->GetMethodID(clazz, "<init>", "()V");
+    if (!mid)
+    {
+        fprintf(stderr, "\tnative: JNI: GetMethodID failed\n");
+        return;
+    }
+
+    g_agent_thread = jni_env->NewObject(clazz, mid, "native_agent_thread");
+    if (!g_agent_thread)
+    {
+        fprintf(stderr, "\tnative: JNI: NewObject failed\n");
+        return;
+    }
+
+    g_agent_thread = jni_env->NewGlobalRef(g_agent_thread);
+    result = jvmti_env->GetThreadInfo(g_agent_thread, &tinfo);
+    if (result != JVMTI_ERROR_NONE)
+    {
+        fprintf(stderr, "\tnative: JNI: GetThreadInfo failed\n");
+    }
+
+    result = jvmti_env->RunAgentThread(g_agent_thread, test_function, NULL, JVMTI_THREAD_NORM_PRIORITY);
+    if (result != JVMTI_ERROR_NONE)
+    {
+        fprintf(stderr, "\tnative: jvmti: RunAgentThread failed\n");
+        return;
+    }*/
+}
+/*
+JNIEXPORT jint
+JNICALL Agent_OnLoad(JavaVM *jvm, char *options, void *reserved)
+{
+    jint res;
+    jvmtiEnv* jvmti_env = NULL;
+
+    res = jvm->GetEnv((void**)&jvmti_env, JVMTI_VERSION_1_0);
+    if (res != JNI_OK || jvmti_env == NULL)
+        return JNI_ERR;
+
+    jvmtiEventCallbacks callbacks;
+    callbacks.ThreadStart=&ThreadStart;
+
+    jvmti_env->SetEventCallbacks(&callbacks, sizeof(callbacks));
+    jvmti_env->SetEventNotificationMode(JVMTI_ENABLE, JVMTI_EVENT_THREAD_START, NULL);
+
+    return JNI_OK;
+}
+*/
+/* *********************************************************************** */
+
+JNIEXPORT jint JNICALL Agent_OnLoad(prms_AGENT_ONLOAD)
+{
+
+    Callbacks CB;
+    CB.cbThreadStart = &ThreadStart;
+    check_AGENT_ONLOAD;
+    jvmtiEvent events[] = { JVMTI_EVENT_EXCEPTION, JVMTI_EVENT_THREAD_START, JVMTI_EVENT_VM_DEATH };
+    cb_exc;
+    cb_death;
+    return func_for_Agent_OnLoad(vm, options, reserved, &CB,
+        events, sizeof(events)/sizeof(jvmtiEvent), test_case_name, DEBUG_OUT);
+}
+
+/* *********************************************************************** */
+
+void JNICALL callbackException(jvmtiEnv *jvmti_env, JNIEnv* jni_env,
+                               jthread thread, jmethodID method,
+                               jlocation location, jobject exception,
+                               jmethodID catch_method, jlocation catch_location)
+{
+    check_EXCPT;
+    if (flag) return;
+
+    /*
+     * Function separate all other exceptions in all other method
+     */
+    if (!check_phase_and_method_debug(jvmti_env, method, SPP_LIVE_ONLY,
+                "special_method", DEBUG_OUT)) return;
+
+    flag = true;
+    util = true;
+
+    fprintf(stderr, "agent... \n");
+    SLEEP_UNIVERSAL(300);
+    ////////////////////ncai env get
+    jvmtiError err;
+    ncaiError ncai_err;
+
+    jvmtiExtensionFunctionInfo* ext_info = NULL;
+    jint ext_count = 0;
+
+    err = jvmti_env->GetExtensionFunctions(&ext_count, &ext_info);
+
+    if (err != JVMTI_ERROR_NONE)
+    {
+        fprintf(stderr, "test_function: GetExtensionFunctions() returned error: %d, '%s'\n",
+            err, get_jvmti_eror_text(err));
+        test = false;
+        return;
+    }
+
+    fprintf(stderr, "agent... \n");
+    if (ext_count == 0 || ext_info == NULL)
+    {
+        fprintf(stderr, "test_function: GetExtensionFunctions() returned no extensions\n");
+        test = false;
+        return;
+    }
+
+    jvmtiExtensionFunction get_ncai_func = NULL;
+
+    fprintf(stderr, "agent... \n");
+    for (int k = 0; k < ext_count; k++)
+    {
+        if (strcmp(ext_info[k].id, "org.apache.harmony.vm.GetExtensionEnv") == 0)
+        {
+            get_ncai_func = ext_info[k].func;
+            break;
+        }
+    }
+
+    fprintf(stderr, "agent... \n");
+    if (get_ncai_func == NULL)
+    {
+        fprintf(stderr, "test_function: GetNCAIEnvironment() nas not been found among JVMTI extensions\n");
+        test = false;
+        return;
+    }
+
+    ncaiEnv* ncai_env = NULL;
+
+    fprintf(stderr, "agent... \n");
+    err = get_ncai_func(jvmti_env, &ncai_env, NCAI_VERSION_1_0);
+
+    if (err != JVMTI_ERROR_NONE)
+    {
+        fprintf(stderr, "test_function: get_ncai_func() returned error: %d, '%s'\n",
+            err, get_jvmti_eror_text(err));
+        test = false;
+        return;
+    }
+
+    if (ncai_env == NULL)
+    {
+        fprintf(stderr, "test_function: get_ncai_func() returned NULL environment\n");
+        test = false;
+        return;
+    }
+    fprintf(stderr, "agent... \n");
+    ///////////////////////////////////
+    SLEEP_UNIVERSAL(500);
+    while(!g_resume_agent_thread)
+            SLEEP_UNIVERSAL(200);
+
+    g_resume_agent_thread = 0;
+
+    ncaiThread ncai_thread;
+
+    fprintf(stderr, "calling ncai->GetThreadHandle()...\n");
+    ncai_err = ncai_env->GetThreadHandle(g_thread_jthread, &ncai_thread);
+    if (ncai_err != NCAI_ERROR_NONE)
+    {
+        fprintf(stderr, "ncai->GetThreadHandle() returned error: %d", ncai_err);
+        test = false;
+        return;
+    }
+
+    ncaiFrameInfo* frames1;
+    ncaiFrameInfo* frames2;
+    jint frames_returned1, frames_returned2;
+
+    test = CheckFrames(ncai_env, ncai_thread, &frames1, &frames_returned1);
+
+    g_stop_thread = 1;
+    SLEEP_UNIVERSAL(500);
+    while(!g_resume_agent_thread)
+            SLEEP_UNIVERSAL(200);
+
+    g_resume_agent_thread = 0;
+
+    test = test && CheckFrames(ncai_env, ncai_thread, &frames2, &frames_returned2);
+
+    if (frames_returned1 - frames_returned2 != 3)
+    {
+        fprintf(stderr, "\nincorrect frames count\n");
+        test = false;
+        g_stop_thread = 0;
+        return;
+    }
+
+    g_stop_thread = 0;
+}
+
+void JNICALL callbackVMDeath(prms_VMDEATH)
+{
+    check_VMDEATH;
+    func_for_callback_VMDeath(jni_env, jvmti_env, test_case_name, test, util);
+}
+
+/* *********************************************************************** */
+
+void Test1(JNIEnv *env, jobject obj)
+{
+    if(!no_opt)
+        Test1(env, obj);
+
+    fprintf(stderr, "thread - pure native Test1\n");
+    return Test2(env, obj);
+}
+
+void Test2(JNIEnv *env, jobject obj)
+{
+    if(!no_opt)
+        Test2(env, obj);
+
+    fprintf(stderr, "thread - pure native Test2\n");
+    return Test3(env, obj);
+}
+
+void Test3(JNIEnv *env, jobject obj)
+{
+    if(!no_opt)
+        Test3(env, obj);
+
+    fprintf(stderr, "thread - pure native Test3\n");
+    jclass clazz = env->GetObjectClass(obj);
+    if (!clazz)
+    {
+        fprintf(stderr, "\tnative: native TestFunction1: GetObjectClass failed\n");
+        return;
+    }
+
+    jmethodID mid = env->GetStaticMethodID(clazz, "sleep", "(J)V");
+    if (!mid)
+    {
+        fprintf(stderr, "\tnative: native TestFunction1: GetStaticMethodID for 'sleep' failed\n");
+        return;
+    }
+
+    g_resume_agent_thread = 1;
+    while(!g_stop_thread)
+    {
+        fprintf(stderr, "thread... \n");
+        SLEEP_UNIVERSAL(100);
+//        env->CallStaticVoidMethod(clazz, mid, 500);
+    }
+
+    return;
+}
+
+bool CheckFrames(ncaiEnv *ncai_env, ncaiThread ncai_thread, ncaiFrameInfo** ret_frames, jint* ret_count)
+{
+    //warning fix
+    int w_fix = sizeof(ret_frames);
+    w_fix += 3;
+    //
+
+    fprintf(stderr, "agent... suspend thread \n");
+    ncaiError ncai_err = ncai_env->SuspendThread(ncai_thread);
+    if (ncai_err != NCAI_ERROR_NONE)
+    {
+        fprintf(stderr, "ncai->SuspendThread() returned error: %d,\n", ncai_err);
+        return false;
+    }
+
+    jint frame_count;
+    fprintf(stderr, "calling ncai->GetFrameCount()...\n");
+    ncai_err = ncai_env->GetFrameCount(ncai_thread, &frame_count);
+    if (ncai_err != NCAI_ERROR_NONE)
+    {
+        fprintf(stderr, "ncai->GetFrameCount() returned error: %d,\n", ncai_err);
+        return false;
+    }
+
+    fprintf(stderr, "test_function: frame count = %d\n", frame_count);
+
+    fprintf(stderr, "agent... resuming thread \n");
+    ncai_env->ResumeThread(ncai_thread);
+    if (ncai_err != NCAI_ERROR_NONE)
+    {
+        fprintf(stderr, "ncai->SuspendThread() returned error: %d,\n", ncai_err);
+        return false;
+    }
+
+    *ret_count = frame_count;
+
+    return true;
+}

Propchange: harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetFrameCount/GetFrameCount01/GetFrameCount01.cpp
------------------------------------------------------------------------------
    svn:eol-style = native

Added: harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetFrameCount/GetFrameCount01/GetFrameCount01.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetFrameCount/GetFrameCount01/GetFrameCount01.java?rev=597138&view=auto
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetFrameCount/GetFrameCount01/GetFrameCount01.java (added)
+++ harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetFrameCount/GetFrameCount01/GetFrameCount01.java Wed Nov 21 08:29:40 2007
@@ -0,0 +1,88 @@
+package ncai.funcs;
+
+/**
+ * @author Petr Ivanov
+ * @version $Revision: 1.1.1.1 $
+ *
+ */
+public class GetFrameCount01 extends Thread{
+    public native void TestFunction();
+    public native void TestFunction1();
+    public static native boolean stopsignal();
+
+    static boolean NoLibrary = false;
+    static {
+        try{
+            System.loadLibrary("GetFrameCount01");
+        }
+        catch(Throwable e){
+            NoLibrary = true;
+        }
+    }
+
+    GetFrameCount01(String name)
+    {
+        super(name);
+    }
+
+    static public void main(String args[]) {
+        if(NoLibrary) return;
+        new GetFrameCount01("java_thread").start();
+        special_method();
+        /*
+        while(!stopsignal()){
+            try {
+                sleep(100, 0); // milliseconds
+            } catch (java.lang.InterruptedException ie) {}
+            System.out.println("\tJAVA: main: ...");
+        }
+
+        try {
+            sleep(1000, 0); // milliseconds
+        } catch (java.lang.InterruptedException ie) {}
+
+        System.out.println("\tJAVA: main - exit");
+
+*/
+        return;
+    }
+
+    public void test_java_func1(){
+        System.out.println("thread - java func1\n");
+        TestFunction();
+    }
+
+    public void test_java_func2(){
+        System.out.println("thread - java func2\n");
+        test_java_func3();
+    }
+
+    public void test_java_func3(){
+        System.out.println("thread - java func3\n");
+        /*while(!stopsignal())
+        {
+            try {
+                sleep(100, 0); // milliseconds
+            } catch (java.lang.InterruptedException ie) {}
+            System.out.println("\tJAVA: Thread: ...");
+        }*/
+        TestFunction1();
+    }
+
+    static public void special_method() {
+        /*
+         * Transfer control to native part.
+         */
+        try {
+            throw new InterruptedException();
+        } catch (Throwable tex) { }
+        return;
+    }
+
+    public void run() {
+        System.out.println("thread - java run\n");
+        test_java_func1();
+    }
+}
+
+

Propchange: harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetFrameCount/GetFrameCount01/GetFrameCount01.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetFrameCount/GetFrameCount01n/GetFrameCount01n.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetFrameCount/GetFrameCount01n/GetFrameCount01n.cpp?rev=597138&view=auto
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetFrameCount/GetFrameCount01n/GetFrameCount01n.cpp (added)
+++ harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetFrameCount/GetFrameCount01n/GetFrameCount01n.cpp Wed Nov 21 08:29:40 2007
@@ -0,0 +1,411 @@
+/**
+ * @author Petr Ivanov
+ * @version $Revision: 1.1.1.1 $
+ *
+ */
+
+/* *********************************************************************** */
+
+#include "events.h"
+#include "utils.h"
+#include "ncai.h"
+
+#ifdef POSIX
+#include <stdlib.h>
+#include <time.h>
+#else
+#include <windows.h>
+#include <CRTDBG.H>
+#endif
+
+#ifdef POSIX
+#define SLEEP_UNIVERSAL(_x_)  { timespec delay = {(_x_)/1000, 1000000*((_x_)%1000)}; nanosleep(&delay, NULL); }
+#else // #ifdef POSIX
+#define SLEEP_UNIVERSAL(_x_)  Sleep((_x_))
+#endif // #ifdef POSIX
+
+static int g_stop_thread = 0;
+static int g_resume_agent_thread = 0;
+static jthread g_thread_jthread;
+//static jthread g_agent_thread;
+
+static volatile int no_opt = 1; //used to prevent inlining;
+
+static bool test = false;
+static bool util = false;
+static bool flag = false;
+
+const char test_case_name[] = "GetFrameCount01n";
+
+static void Test1(JNIEnv *env, jobject obj);
+static void Test2(JNIEnv *env, jobject obj);
+static void Test3(JNIEnv *env, jobject obj);
+//static void JNICALL test_function(jvmtiEnv*, JNIEnv*, void*);
+static  bool CheckFrames(ncaiEnv*, ncaiThread, ncaiFrameInfo**, jint*);
+
+extern "C" JNIEXPORT void JNICALL
+Java_ncai_funcs_GetFrameCount01n_resumeagent(JNIEnv *env, jclass cls)
+{
+    //warning fix
+    int w_fix = sizeof(cls);
+    w_fix += sizeof(env);
+    //
+
+    g_resume_agent_thread = 1;
+}
+
+extern "C" JNIEXPORT jboolean JNICALL
+Java_ncai_funcs_GetFrameCount01n_stopsignal(JNIEnv *env, jclass cls)
+{
+    //warning fix
+    int w_fix = sizeof(cls);
+    w_fix += sizeof(env);
+    //
+
+    return g_stop_thread ? true : false;
+}
+
+extern "C" JNIEXPORT void JNICALL Java_ncai_funcs_GetFrameCount01n_TestFunction
+  (JNIEnv *env, jobject obj)
+{
+    fprintf(stderr, "thread - native TestFunction\n");
+
+    jclass clazz = env->GetObjectClass(obj);
+    if (!clazz)
+    {
+        fprintf(stderr, "\tnative: native TestFunction: GetObjectClass failed\n");
+        return;
+    }
+
+    jmethodID mid = env->GetMethodID(clazz, "test_java_func2", "()V");
+    if (!mid)
+    {
+        fprintf(stderr, "\tnative: native TestFunction: GetStaticMethodID for 'test_java_func2' failed\n");
+        return;
+    }
+    env->CallVoidMethod(obj, mid);
+    return;
+}
+
+extern "C" JNIEXPORT void JNICALL Java_ncai_funcs_GetFrameCount01n_TestFunction1
+  (JNIEnv *env, jobject obj)
+{
+    fprintf(stderr, "thread - native TestFunction1\n");
+    Test1(env, obj);
+
+    jclass clazz = env->GetObjectClass(obj);
+    if (!clazz)
+    {
+        fprintf(stderr, "\tnative: native TestFunction1: GetObjectClass failed\n");
+        return;
+    }
+
+    jmethodID mid = env->GetStaticMethodID(clazz, "sleep", "(J)V");
+    if (!mid)
+    {
+        fprintf(stderr, "\tnative: native TestFunction1: GetStaticMethodID for 'sleep' failed\n");
+        return;
+    }
+
+    g_resume_agent_thread = 1;/*
+    while(g_stop_thread)
+    {
+        fprintf(stderr, "thread... \n");
+        SLEEP_UNIVERSAL(100);
+//        env->CallStaticVoidMethod(clazz, mid, 500);
+    }*/
+
+    return;
+}
+
+void JNICALL ThreadStart(jvmtiEnv *jvmti_env,
+            JNIEnv* jni_env,
+            jthread thread)
+{
+    jvmtiPhase phase;
+    jvmtiError result;
+    jvmtiThreadInfo tinfo;
+
+    result = jvmti_env->GetPhase(&phase);
+    if (result != JVMTI_ERROR_NONE || phase != JVMTI_PHASE_LIVE)
+        return;
+
+    result = jvmti_env->GetThreadInfo(thread, &tinfo);
+    if (result != JVMTI_ERROR_NONE)
+        return;
+
+    if (strcmp(tinfo.name, "java_thread") != 0)
+        return;
+
+    printf("ThreadStart: java_thread\n");
+    g_thread_jthread = jni_env->NewGlobalRef(thread);
+/*
+    jclass clazz = jni_env->FindClass("java/lang/Thread");
+    if (!clazz)
+    {
+        fprintf(stderr, "\tnative: JNI: FindClass failed\n");
+        return;
+    }
+
+    jmethodID mid = jni_env->GetMethodID(clazz, "<init>", "()V");
+    if (!mid)
+    {
+        fprintf(stderr, "\tnative: JNI: GetMethodID failed\n");
+        return;
+    }
+
+    g_agent_thread = jni_env->NewObject(clazz, mid, "native_agent_thread");
+    if (!g_agent_thread)
+    {
+        fprintf(stderr, "\tnative: JNI: NewObject failed\n");
+        return;
+    }
+
+    g_agent_thread = jni_env->NewGlobalRef(g_agent_thread);
+    result = jvmti_env->GetThreadInfo(g_agent_thread, &tinfo);
+    if (result != JVMTI_ERROR_NONE)
+    {
+        fprintf(stderr, "\tnative: JNI: GetThreadInfo failed\n");
+    }
+
+    result = jvmti_env->RunAgentThread(g_agent_thread, test_function, NULL, JVMTI_THREAD_NORM_PRIORITY);
+    if (result != JVMTI_ERROR_NONE)
+    {
+        fprintf(stderr, "\tnative: jvmti: RunAgentThread failed\n");
+        return;
+    }*/
+}
+/*
+JNIEXPORT jint
+JNICALL Agent_OnLoad(JavaVM *jvm, char *options, void *reserved)
+{
+    jint res;
+    jvmtiEnv* jvmti_env = NULL;
+
+    res = jvm->GetEnv((void**)&jvmti_env, JVMTI_VERSION_1_0);
+    if (res != JNI_OK || jvmti_env == NULL)
+        return JNI_ERR;
+
+    jvmtiEventCallbacks callbacks;
+    callbacks.ThreadStart=&ThreadStart;
+
+    jvmti_env->SetEventCallbacks(&callbacks, sizeof(callbacks));
+    jvmti_env->SetEventNotificationMode(JVMTI_ENABLE, JVMTI_EVENT_THREAD_START, NULL);
+
+    return JNI_OK;
+}
+*/
+/* *********************************************************************** */
+
+JNIEXPORT jint JNICALL Agent_OnLoad(prms_AGENT_ONLOAD)
+{
+
+    Callbacks CB;
+    CB.cbThreadStart = &ThreadStart;
+    check_AGENT_ONLOAD;
+    jvmtiEvent events[] = { JVMTI_EVENT_EXCEPTION, JVMTI_EVENT_THREAD_START, JVMTI_EVENT_VM_DEATH };
+    cb_exc;
+    cb_death;
+    return func_for_Agent_OnLoad(vm, options, reserved, &CB,
+        events, sizeof(events)/sizeof(jvmtiEvent), test_case_name, DEBUG_OUT);
+}
+
+/* *********************************************************************** */
+
+void JNICALL callbackException(jvmtiEnv *jvmti_env, JNIEnv* jni_env,
+                               jthread thread, jmethodID method,
+                               jlocation location, jobject exception,
+                               jmethodID catch_method, jlocation catch_location)
+{
+    check_EXCPT;
+    if (flag) return;
+
+    /*
+     * Function separate all other exceptions in all other method
+     */
+    if (!check_phase_and_method_debug(jvmti_env, method, SPP_LIVE_ONLY,
+                "special_method", DEBUG_OUT)) return;
+
+    flag = true;
+    util = true;
+
+    fprintf(stderr, "agent... \n");
+    SLEEP_UNIVERSAL(300);
+    ////////////////////ncai env get
+    jvmtiError err;
+    ncaiError ncai_err;
+
+    jvmtiExtensionFunctionInfo* ext_info = NULL;
+    jint ext_count = 0;
+
+    err = jvmti_env->GetExtensionFunctions(&ext_count, &ext_info);
+
+    if (err != JVMTI_ERROR_NONE)
+    {
+        fprintf(stderr, "test_function: GetExtensionFunctions() returned error: %d, '%s'\n",
+            err, get_jvmti_eror_text(err));
+        test = false;
+        return;
+    }
+
+    fprintf(stderr, "agent... \n");
+    if (ext_count == 0 || ext_info == NULL)
+    {
+        fprintf(stderr, "test_function: GetExtensionFunctions() returned no extensions\n");
+        test = false;
+        return;
+    }
+
+    jvmtiExtensionFunction get_ncai_func = NULL;
+
+    fprintf(stderr, "agent... \n");
+    for (int k = 0; k < ext_count; k++)
+    {
+        if (strcmp(ext_info[k].id, "org.apache.harmony.vm.GetExtensionEnv") == 0)
+        {
+            get_ncai_func = ext_info[k].func;
+            break;
+        }
+    }
+
+    fprintf(stderr, "agent... \n");
+    if (get_ncai_func == NULL)
+    {
+        fprintf(stderr, "test_function: GetNCAIEnvironment() nas not been found among JVMTI extensions\n");
+        test = false;
+        return;
+    }
+
+    ncaiEnv* ncai_env = NULL;
+
+    fprintf(stderr, "agent... \n");
+    err = get_ncai_func(jvmti_env, &ncai_env, NCAI_VERSION_1_0);
+
+    if (err != JVMTI_ERROR_NONE)
+    {
+        fprintf(stderr, "test_function: get_ncai_func() returned error: %d, '%s'\n",
+            err, get_jvmti_eror_text(err));
+        test = false;
+        return;
+    }
+
+    if (ncai_env == NULL)
+    {
+        fprintf(stderr, "test_function: get_ncai_func() returned NULL environment\n");
+        test = false;
+        return;
+    }
+    fprintf(stderr, "agent... \n");
+    ///////////////////////////////////
+    ncaiThread ncai_thread;
+
+    fprintf(stderr, "calling ncai->GetThreadHandle()...\n");
+    ncai_err = ncai_env->GetThreadHandle(g_thread_jthread, &ncai_thread);
+    if (ncai_err != NCAI_ERROR_NONE)
+    {
+        fprintf(stderr, "ncai->GetThreadHandle() returned error: %d", ncai_err);
+        test = false;
+        return;
+    }
+
+    ncaiFrameInfo* frames;
+    jint frames_returned;
+
+    while(!g_resume_agent_thread)
+            SLEEP_UNIVERSAL(200);
+
+    g_resume_agent_thread = 0;
+
+    test = CheckFrames(ncai_env, ncai_thread, &frames, &frames_returned);
+    g_stop_thread = 1;
+/*    SLEEP_UNIVERSAL(500);
+
+    while(!g_resume_agent_thread)
+            SLEEP_UNIVERSAL(200);
+
+    g_resume_agent_thread = 0;
+
+    g_stop_thread = 0;
+    SLEEP_UNIVERSAL(500);
+
+    while(!g_resume_agent_thread)
+            SLEEP_UNIVERSAL(200);
+
+    g_resume_agent_thread = 0;
+    g_stop_thread = 1; */
+}
+
+void JNICALL callbackVMDeath(prms_VMDEATH)
+{
+    check_VMDEATH;
+    func_for_callback_VMDeath(jni_env, jvmti_env, test_case_name, test, util);
+}
+
+/* *********************************************************************** */
+
+void Test1(JNIEnv *env, jobject obj)
+{
+    if(!no_opt)
+        Test1(env, obj);
+
+    fprintf(stderr, "thread - pure native Test1\n");
+    return Test2(env, obj);
+}
+
+void Test2(JNIEnv *env, jobject obj)
+{
+    if(!no_opt)
+        Test2(env, obj);
+
+    fprintf(stderr, "thread - pure native Test2\n");
+    return Test3(env, obj);
+}
+
+void Test3(JNIEnv *env, jobject obj)
+{
+    if(!no_opt)
+        Test3(env, obj);
+
+    fprintf(stderr, "thread - pure native Test3\n");
+    jclass clazz = env->GetObjectClass(obj);
+    if (!clazz)
+    {
+        fprintf(stderr, "\tnative: native TestFunction1: GetObjectClass failed\n");
+        return;
+    }
+
+    jmethodID mid = env->GetStaticMethodID(clazz, "sleep", "(J)V");
+    if (!mid)
+    {
+        fprintf(stderr, "\tnative: native TestFunction1: GetStaticMethodID for 'sleep' failed\n");
+        return;
+    }
+
+    g_resume_agent_thread = 1;
+    while(!g_stop_thread)
+    {
+        fprintf(stderr, "thread... \n");
+        SLEEP_UNIVERSAL(100);
+//        env->CallStaticVoidMethod(clazz, mid, 500);
+    }
+
+    return;
+}
+
+bool CheckFrames(ncaiEnv *ncai_env, ncaiThread ncai_thread, ncaiFrameInfo** ret_frames, jint* ret_count)
+{
+    //warning fix
+    int w_fix = sizeof(ret_frames);
+    w_fix += sizeof(ret_count);
+    //
+
+    jint frame_count;
+    fprintf(stderr, "calling ncai->GetFrameCount()...\n");
+    ncaiError ncai_err = ncai_env->GetFrameCount(ncai_thread, &frame_count);
+    if (ncai_err == NCAI_ERROR_THREAD_NOT_SUSPENDED)
+    {
+        return true;
+    }
+
+    return false;
+}

Propchange: harmony/enhanced/drlvm/trunk/vm/tests/ncai/funcs/GetFrameCount/GetFrameCount01n/GetFrameCount01n.cpp
------------------------------------------------------------------------------
    svn:eol-style = native



Mime
View raw message