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 native_to_java_process(m_process_t process)
19 return ((smx_ctx_java_t)MSG_process_get_smx_ctx(process))->jprocess;
22 jobject jprocess_new_global_ref(jobject jprocess, JNIEnv * env)
24 return (*env)->NewGlobalRef(env, jprocess);
27 void jprocess_delete_global_ref(jobject jprocess, JNIEnv * env)
29 (*env)->DeleteGlobalRef(env, jprocess);
32 jboolean jprocess_is_alive(jobject jprocess, JNIEnv * env)
35 jxbt_get_smethod(env, "org/simgrid/msg/Process", "isAlive", "()Z");
40 return (*env)->CallBooleanMethod(env, jprocess, id);
43 void jprocess_join(jobject jprocess, JNIEnv * env)
46 jxbt_get_smethod(env, "org/simgrid/msg/Process", "join", "()V");
51 (*env)->CallVoidMethod(env, jprocess, id);
54 void jprocess_exit(jobject jprocess, JNIEnv * env)
57 jxbt_get_smethod(env, "org/simgrid/msg/Process", "interrupt", "()V");
62 (*env)->CallVoidMethod(env, jprocess, id);
65 void jprocess_yield(jobject jprocess, JNIEnv * env)
68 jxbt_get_smethod(env, "org/simgrid/msg/Process", "switchProcess", "()V");
73 (*env)->CallVoidMethod(env, jprocess, id);
76 void jprocess_lock_mutex(jobject jprocess, JNIEnv * env)
79 jxbt_get_smethod(env, "org/simgrid/msg/Process", "lockMutex", "()V");
84 (*env)->CallVoidMethod(env, jprocess, id);
87 void jprocess_unlock_mutex(jobject jprocess, JNIEnv * env)
90 jxbt_get_smethod(env, "org/simgrid/msg/Process", "unlockMutex", "()V");
95 (*env)->CallVoidMethod(env, jprocess, id);
99 void jprocess_signal_cond(jobject jprocess, JNIEnv * env)
102 jxbt_get_smethod(env, "org/simgrid/msg/Process", "signalCond", "()V");
107 (*env)->CallVoidMethod(env, jprocess, id);
110 void jprocess_wait_cond(jobject jprocess, JNIEnv * env)
113 jxbt_get_smethod(env, "org/simgrid/msg/Process", "waitCond", "()V");
118 (*env)->CallVoidMethod(env, jprocess, id);
122 void jprocess_start(jobject jprocess, JNIEnv * env)
125 jxbt_get_smethod(env, "org/simgrid/msg/Process", "start", "()V");
130 XBT_DEBUG("jprocess_start(jproc=%p,env=%p)", jprocess, env);
131 (*env)->CallVoidMethod(env, jprocess, id);
132 XBT_DEBUG("jprocess started");
135 m_process_t jprocess_to_native_process(jobject jprocess, JNIEnv * env)
137 jfieldID id = jxbt_get_sfield(env, "org/simgrid/msg/Process", "bind", "J");
142 return (m_process_t) (long) (*env)->GetLongField(env, jprocess, id);
145 void jprocess_bind(jobject jprocess, m_process_t process, JNIEnv * env)
147 jfieldID id = jxbt_get_sfield(env, "org/simgrid/msg/Process", "bind", "J");
151 (*env)->SetLongField(env, jprocess, id, (jlong) (long) (process));
154 jlong jprocess_get_id(jobject jprocess, JNIEnv * env)
156 jfieldID id = jxbt_get_sfield(env, "org/simgrid/msg/Process", "id", "J");
161 return (*env)->GetLongField(env, jprocess, id);
164 jstring jprocess_get_name(jobject jprocess, JNIEnv * env)
166 jfieldID id = jxbt_get_sfield(env, "org/simgrid/msg/Process", "name",
167 "Ljava/lang/String;");
173 jname = (jstring) (*env)->GetObjectField(env, jprocess, id);
175 return (*env)->NewGlobalRef(env, jname);
179 jboolean jprocess_is_valid(jobject jprocess, JNIEnv * env)
181 jfieldID id = jxbt_get_sfield(env, "org/simgrid/msg/Process", "bind", "J");
186 return (*env)->GetLongField(env, jprocess, id) ? JNI_TRUE : JNI_FALSE;
189 void jprocess_schedule(smx_context_t context)
194 env = get_current_thread_env();
196 id = jxbt_get_smethod(env, "org/simgrid/msg/Process", "schedule", "()V");
199 XBT_CRITICAL("Cannot find java method org/simgrid/msg/Process/schedule()V");
203 (*env)->CallVoidMethod(env, ((smx_ctx_java_t) context)->jprocess, id);
208 void jprocess_unschedule(smx_context_t context)
213 env = get_current_thread_env();
216 id = jxbt_get_smethod(env, "org/simgrid/msg/Process", "unschedule", "()V");
221 (*env)->CallVoidMethod(env, ((smx_ctx_java_t) context)->jprocess, id);