62 (void)obj;
63
64 RunnableContext* context = (RunnableContext*) JLONG_TO_PTR(ptr);
65 context->flag = 1;
66 env->DeleteGlobalRef(context->runnable);
67 context->runnable = NULL;
68 }
69
70 } // extern "C"
71
72
73 static gboolean call_runnable_in_timer
74 (gpointer data)
75 {
76 RunnableContext* context = (RunnableContext*) data;
77 if (context->flag) {
78 free(context);
79 return FALSE;
80 }
81 else if (context->runnable) {
82 mainEnv->CallVoidMethod(context->runnable, jRunnableRun, NULL);
83 LOG_EXCEPTION(mainEnv);
84 }
85 return TRUE;
86 }
87
|
62 (void)obj;
63
64 RunnableContext* context = (RunnableContext*) JLONG_TO_PTR(ptr);
65 context->flag = 1;
66 env->DeleteGlobalRef(context->runnable);
67 context->runnable = NULL;
68 }
69
70 } // extern "C"
71
72
73 static gboolean call_runnable_in_timer
74 (gpointer data)
75 {
76 RunnableContext* context = (RunnableContext*) data;
77 if (context->flag) {
78 free(context);
79 return FALSE;
80 }
81 else if (context->runnable) {
82 JNIEnv *env;
83 int envStatus = javaVM->GetEnv((void **)&env, JNI_VERSION_1_6);
84 if (envStatus == JNI_EDETACHED) {
85 javaVM->AttachCurrentThread((void **)&env, NULL);
86 }
87
88 env->CallVoidMethod(context->runnable, jRunnableRun, NULL);
89 LOG_EXCEPTION(env);
90
91 if (envStatus == JNI_EDETACHED) {
92 javaVM->DetachCurrentThread();
93 }
94 }
95 return TRUE;
96 }
97
|