Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Move functions from MsgNative to Host, and from jmsg to jmsg_host
[simgrid.git] / src / jmsg_process.c
1 /* Functions related to the java process instances.                         */
2
3 /* Copyright (c) 2007, 2008, 2009, 2010. The SimGrid Team.
4  * All rights reserved.                                                     */
5
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. */
8
9 #include "jmsg_process.h"
10 #include "jmsg.h"
11 #include "jxbt_utilities.h"
12
13 #include "smx_context_java.h"  
14
15 XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(jmsg);
16
17 jobject native_to_java_process(m_process_t process)
18 {
19   return ((smx_ctx_java_t)MSG_process_get_smx_ctx(process))->jprocess;
20 }
21
22 jobject jprocess_new_global_ref(jobject jprocess, JNIEnv * env)
23 {
24   return (*env)->NewGlobalRef(env, jprocess);
25 }
26
27 void jprocess_delete_global_ref(jobject jprocess, JNIEnv * env)
28 {
29   (*env)->DeleteGlobalRef(env, jprocess);
30 }
31
32 jboolean jprocess_is_alive(jobject jprocess, JNIEnv * env)
33 {
34   jmethodID id =
35       jxbt_get_smethod(env, "org/simgrid/msg/Process", "isAlive", "()Z");
36
37   if (!id)
38     return 0;
39
40   return (*env)->CallBooleanMethod(env, jprocess, id);
41 }
42
43 void jprocess_join(jobject jprocess, JNIEnv * env)
44 {
45   jmethodID id =
46       jxbt_get_smethod(env, "org/simgrid/msg/Process", "join", "()V");
47
48   if (!id)
49     return;
50
51   (*env)->CallVoidMethod(env, jprocess, id);
52 }
53
54 void jprocess_exit(jobject jprocess, JNIEnv * env)
55 {
56   jmethodID id =
57       jxbt_get_smethod(env, "org/simgrid/msg/Process", "interrupt", "()V");
58
59   if (!id)
60     return;
61
62   (*env)->CallVoidMethod(env, jprocess, id);
63 }
64
65 void jprocess_yield(jobject jprocess, JNIEnv * env)
66 {
67   jmethodID id =
68       jxbt_get_smethod(env, "org/simgrid/msg/Process", "switchProcess", "()V");
69
70   if (!id)
71     return;
72
73   (*env)->CallVoidMethod(env, jprocess, id);
74 }
75
76 void jprocess_lock_mutex(jobject jprocess, JNIEnv * env)
77 {
78   jmethodID id =
79       jxbt_get_smethod(env, "org/simgrid/msg/Process", "lockMutex", "()V");
80
81   if (!id)
82     return;
83
84   (*env)->CallVoidMethod(env, jprocess, id);
85 }
86
87 void jprocess_unlock_mutex(jobject jprocess, JNIEnv * env)
88 {
89   jmethodID id =
90       jxbt_get_smethod(env, "org/simgrid/msg/Process", "unlockMutex", "()V");
91
92   if (!id)
93     return;
94
95   (*env)->CallVoidMethod(env, jprocess, id);
96 }
97
98
99 void jprocess_signal_cond(jobject jprocess, JNIEnv * env)
100 {
101   jmethodID id =
102       jxbt_get_smethod(env, "org/simgrid/msg/Process", "signalCond", "()V");
103
104   if (!id)
105     return;
106
107   (*env)->CallVoidMethod(env, jprocess, id);
108 }
109
110 void jprocess_wait_cond(jobject jprocess, JNIEnv * env)
111 {
112   jmethodID id =
113       jxbt_get_smethod(env, "org/simgrid/msg/Process", "waitCond", "()V");
114
115   if (!id)
116     return;
117
118   (*env)->CallVoidMethod(env, jprocess, id);
119 }
120
121
122 void jprocess_start(jobject jprocess, JNIEnv * env)
123 {
124   jmethodID id =
125       jxbt_get_smethod(env, "org/simgrid/msg/Process", "start", "()V");
126
127   if (!id)
128     return;
129
130   XBT_DEBUG("jprocess_start(jproc=%p,env=%p)", jprocess, env);
131   (*env)->CallVoidMethod(env, jprocess, id);
132   XBT_DEBUG("jprocess started");
133 }
134
135 m_process_t jprocess_to_native_process(jobject jprocess, JNIEnv * env)
136 {
137   jfieldID id = jxbt_get_sfield(env, "org/simgrid/msg/Process", "bind", "J");
138
139   if (!id)
140     return NULL;
141
142   return (m_process_t) (long) (*env)->GetLongField(env, jprocess, id);
143 }
144
145 void jprocess_bind(jobject jprocess, m_process_t process, JNIEnv * env)
146 {
147   jfieldID id = jxbt_get_sfield(env, "org/simgrid/msg/Process", "bind", "J");
148   if (!id)
149     return;
150
151   (*env)->SetLongField(env, jprocess, id, (jlong) (long) (process));
152 }
153
154 jlong jprocess_get_id(jobject jprocess, JNIEnv * env)
155 {
156   jfieldID id = jxbt_get_sfield(env, "org/simgrid/msg/Process", "id", "J");
157
158   if (!id)
159     return 0;
160
161   return (*env)->GetLongField(env, jprocess, id);
162 }
163
164 jstring jprocess_get_name(jobject jprocess, JNIEnv * env)
165 {
166   jfieldID id = jxbt_get_sfield(env, "org/simgrid/msg/Process", "name",
167                                 "Ljava/lang/String;");
168   jobject jname;
169
170   if (!id)
171     return NULL;
172
173   jname = (jstring) (*env)->GetObjectField(env, jprocess, id);
174
175   return (*env)->NewGlobalRef(env, jname);
176
177 }
178
179 jboolean jprocess_is_valid(jobject jprocess, JNIEnv * env)
180 {
181   jfieldID id = jxbt_get_sfield(env, "org/simgrid/msg/Process", "bind", "J");
182
183   if (!id)
184     return JNI_FALSE;
185
186   return (*env)->GetLongField(env, jprocess, id) ? JNI_TRUE : JNI_FALSE;
187 }
188
189 void jprocess_schedule(smx_context_t context)
190 {
191   JNIEnv *env;
192   jmethodID id;
193
194   env = get_current_thread_env();
195
196   id = jxbt_get_smethod(env, "org/simgrid/msg/Process", "schedule", "()V");
197
198   if (!id) {
199     XBT_CRITICAL("Cannot find java method org/simgrid/msg/Process/schedule()V");
200     return;
201   }
202
203   (*env)->CallVoidMethod(env, ((smx_ctx_java_t) context)->jprocess, id);
204 }
205
206
207
208 void jprocess_unschedule(smx_context_t context)
209 {
210   JNIEnv *env;
211   jmethodID id;
212
213   env = get_current_thread_env();
214
215
216   id = jxbt_get_smethod(env, "org/simgrid/msg/Process", "unschedule", "()V");
217
218   if (!id)
219     return;
220
221   (*env)->CallVoidMethod(env, ((smx_ctx_java_t) context)->jprocess, id);
222 }