Logo AND Algorithmique Numérique Distribuée

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