Logo AND Algorithmique Numérique Distribuée

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