Index: thread/src/thread_java_basic.c =================================================================== --- thread/src/thread_java_basic.c (revision 453599) +++ thread/src/thread_java_basic.c (working copy) @@ -43,6 +43,7 @@ typedef struct { jvmtiEnv *tiEnv; jvmtiStartFunction tiProc; void *tiProcArgs; + apr_pool_t *pool; } wrapper_proc_data; @@ -74,14 +75,19 @@ int wrapper_proc(void *arg) { jvmtiEnv *tiEnv = data->tiEnv; jvmtiStartFunction tiProc = data->tiProc; void *tiProcArgs = data->tiProcArgs; + jboolean daemon = data->daemon; + jthread thread = data->thread; TRACE(("TM: Java thread started: id=%d OS_handle=%p", hythread_self()->thread_id, apr_os_thread_current())); + //destroy pool used to transfer parameters + apr_pool_destroy(data->pool); + //status = hythread_global_lock(); //assert (status == TM_ERROR_NONE); status=vm_attach(); if(status!=TM_ERROR_NONE) { - if (!data->daemon){ + if (!daemon){ status1 = countdown_nondaemon_threads(); assert (status1 == TM_ERROR_NONE); } @@ -96,24 +102,24 @@ int wrapper_proc(void *arg) { } else { - (*env) -> CallVoidMethodA(env, data->thread, getRunMethod(env), NULL);//for jthread_create(); + (*env) -> CallVoidMethodA(env, thread, getRunMethod(env), NULL);//for jthread_create(); } jvmti_send_thread_start_end_event(0); - (*env) -> DeleteGlobalRef(env, data->thread); + (*env) -> DeleteGlobalRef(env, thread); TRACE(("TM: Java thread finished: id=%d OS_handle=%p", hythread_self()->thread_id, apr_os_thread_current())); assert(hythread_is_suspend_enabled()); status=vm_detach(); if(status!=TM_ERROR_NONE) { - if (!data->daemon){ + if (!daemon){ status1 = countdown_nondaemon_threads(); assert (status1 == TM_ERROR_NONE); } return status; } assert(hythread_is_suspend_enabled()); - if (!data->daemon){ + if (!daemon){ status = countdown_nondaemon_threads(); assert (status == TM_ERROR_NONE); } @@ -181,6 +187,7 @@ IDATA jthread_create_with_function(JNIEn data->tiEnv = attrs->jvmti_env; data->tiProc = proc; data->tiProcArgs = (void *)arg; + data->pool = pool; // create native thread with wrapper_proc if (!attrs->daemon){