Logo AND Algorithmique Numérique Distribuée

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