1 /* Functions related to the java process instances. */
3 /* Copyright (c) 2007, 2008, 2009, 2010. The SimGrid Team.
4 * All rights reserved. */
6 /* This program is free software; you can redistribute it and/or modify it
7 * under the terms of the license (GNU LGPL) which comes with this package. */
9 #include "jmsg_process.h"
11 #include "jxbt_utilities.h"
13 #include "smx_context_java.h"
15 XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(jmsg);
17 jobject jprocess_new_global_ref(jobject jprocess, JNIEnv * env)
19 return (*env)->NewGlobalRef(env, jprocess);
22 void jprocess_delete_global_ref(jobject jprocess, JNIEnv * env)
24 (*env)->DeleteGlobalRef(env, jprocess);
27 jboolean jprocess_is_alive(jobject jprocess, JNIEnv * env)
30 jxbt_get_smethod(env, "org/simgrid/msg/Process", "isAlive", "()Z");
35 return (*env)->CallBooleanMethod(env, jprocess, id);
38 void jprocess_join(jobject jprocess, JNIEnv * env)
41 jxbt_get_smethod(env, "org/simgrid/msg/Process", "join", "()V");
46 (*env)->CallVoidMethod(env, jprocess, id);
49 void jprocess_exit(jobject jprocess, JNIEnv * env)
52 jxbt_get_smethod(env, "org/simgrid/msg/Process", "interrupt", "()V");
57 (*env)->CallVoidMethod(env, jprocess, id);
60 void jprocess_yield(jobject jprocess, JNIEnv * env)
63 jxbt_get_smethod(env, "org/simgrid/msg/Process", "switchProcess", "()V");
68 (*env)->CallVoidMethod(env, jprocess, id);
71 void jprocess_lock_mutex(jobject jprocess, JNIEnv * env)
74 jxbt_get_smethod(env, "org/simgrid/msg/Process", "lockMutex", "()V");
79 (*env)->CallVoidMethod(env, jprocess, id);
82 void jprocess_unlock_mutex(jobject jprocess, JNIEnv * env)
85 jxbt_get_smethod(env, "org/simgrid/msg/Process", "unlockMutex", "()V");
90 (*env)->CallVoidMethod(env, jprocess, id);
94 void jprocess_signal_cond(jobject jprocess, JNIEnv * env)
97 jxbt_get_smethod(env, "org/simgrid/msg/Process", "signalCond", "()V");
102 (*env)->CallVoidMethod(env, jprocess, id);
105 void jprocess_wait_cond(jobject jprocess, JNIEnv * env)
108 jxbt_get_smethod(env, "org/simgrid/msg/Process", "waitCond", "()V");
113 (*env)->CallVoidMethod(env, jprocess, id);
117 void jprocess_start(jobject jprocess, JNIEnv * env)
120 jxbt_get_smethod(env, "org/simgrid/msg/Process", "start", "()V");
125 XBT_DEBUG("jprocess_start(jproc=%p,env=%p)", jprocess, env);
126 (*env)->CallVoidMethod(env, jprocess, id);
127 XBT_DEBUG("jprocess started");
130 m_process_t jprocess_to_native_process(jobject jprocess, JNIEnv * env)
132 jfieldID id = jxbt_get_sfield(env, "org/simgrid/msg/Process", "bind", "J");
137 return (m_process_t) (long) (*env)->GetLongField(env, jprocess, id);
140 void jprocess_bind(jobject jprocess, m_process_t process, JNIEnv * env)
142 jfieldID id = jxbt_get_sfield(env, "org/simgrid/msg/Process", "bind", "J");
146 (*env)->SetLongField(env, jprocess, id, (jlong) (long) (process));
149 jlong jprocess_get_id(jobject jprocess, JNIEnv * env)
151 jfieldID id = jxbt_get_sfield(env, "org/simgrid/msg/Process", "id", "J");
156 return (*env)->GetLongField(env, jprocess, id);
159 jstring jprocess_get_name(jobject jprocess, JNIEnv * env)
161 jfieldID id = jxbt_get_sfield(env, "org/simgrid/msg/Process", "name",
162 "Ljava/lang/String;");
168 jname = (jstring) (*env)->GetObjectField(env, jprocess, id);
170 return (*env)->NewGlobalRef(env, jname);
174 jboolean jprocess_is_valid(jobject jprocess, JNIEnv * env)
176 jfieldID id = jxbt_get_sfield(env, "org/simgrid/msg/Process", "bind", "J");
181 return (*env)->GetLongField(env, jprocess, id) ? JNI_TRUE : JNI_FALSE;
184 void jprocess_schedule(smx_context_t context)
189 env = get_current_thread_env();
191 id = jxbt_get_smethod(env, "org/simgrid/msg/Process", "schedule", "()V");
194 XBT_CRITICAL("Cannot find java method org/simgrid/msg/Process/schedule()V");
198 (*env)->CallVoidMethod(env, ((smx_ctx_java_t) context)->jprocess, id);
203 void jprocess_unschedule(smx_context_t context)
208 env = get_current_thread_env();
211 id = jxbt_get_smethod(env, "org/simgrid/msg/Process", "unschedule", "()V");
216 (*env)->CallVoidMethod(env, ((smx_ctx_java_t) context)->jprocess, id);