JNIEXPORT void JNICALL
Java_org_simgrid_msg_Comm_nativeInit(JNIEnv *env, jclass cls) {
jclass jfield_class_Comm = (*env)->FindClass(env, "org/simgrid/msg/Comm");
- jcomm_field_Comm_bind = jxbt_get_sfield(env, "org/simgrid/msg/Comm", "bind", "J");
- jcomm_field_Comm_taskBind = jxbt_get_sfield(env, "org/simgrid/msg/Comm", "taskBind", "J");
- jcomm_field_Comm_receiving = jxbt_get_sfield(env, "org/simgrid/msg/Comm", "receiving", "Z");
+ if (!jfield_class_Comm) {
+ jxbt_throw_native(env,bprintf("Can't find the org/simgrid/msg/Comm class."));
+ return;
+ }
+ jcomm_field_Comm_bind = jxbt_get_jfield(env, jfield_class_Comm, "bind", "J");
+ jcomm_field_Comm_taskBind = jxbt_get_jfield(env, jfield_class_Comm, "taskBind", "J");
+ jcomm_field_Comm_receiving = jxbt_get_jfield(env, jfield_class_Comm, "receiving", "Z");
jtask_field_Comm_task = jxbt_get_jfield(env, jfield_class_Comm, "task", "Lorg/simgrid/msg/Task;");
+ if (!jcomm_field_Comm_bind || !jcomm_field_Comm_taskBind || !jcomm_field_Comm_receiving || !jtask_field_Comm_task) {
+ jxbt_throw_native(env,bprintf("Can't find some fields in Java class."));
+ }
}
JNIEXPORT void JNICALL
m_task_t *task_received;
task_received = (m_task_t*) (long) (*env)->GetLongField(env, jcomm, jcomm_field_Comm_taskBind);
- if (task_received != NULL) {
- xbt_free(task_received);
- }
+ xbt_free(task_received);
comm = (msg_comm_t) (long) (*env)->GetLongField(env, jcomm, jcomm_field_Comm_bind);
MSG_comm_destroy(comm);
jxbt_throw_native(env,bprintf("comm is null"));
return JNI_FALSE;
}
- if (MSG_comm_test(comm)) {
- MSG_error_t status = MSG_comm_get_status(comm);
- if (status == MSG_OK) {
- jcomm_bind_task(env,jcomm);
- return JNI_TRUE;
+ TRY {
+ if (MSG_comm_test(comm)) {
+ MSG_error_t status = MSG_comm_get_status(comm);
+ if (status == MSG_OK) {
+ jcomm_bind_task(env,jcomm);
+ return JNI_TRUE;
+ }
+ else {
+ //send the correct exception
+ jcomm_throw(env,status);
+ return JNI_FALSE;
+ }
}
else {
- //send the correct exception
- jcomm_throw(env,status);
return JNI_FALSE;
}
}
- else {
- return JNI_FALSE;
+ CATCH_ANONYMOUS {
+
}
+ return JNI_FALSE;
}
JNIEXPORT void JNICALL
Java_org_simgrid_msg_Comm_waitCompletion(JNIEnv *env, jobject jcomm, jdouble timeout) {
jxbt_throw_native(env,bprintf("comm is null"));
return;
}
-
- MSG_error_t status = MSG_comm_wait(comm,(double)timeout);
+ MSG_error_t status;
+ TRY {
+ status = MSG_comm_wait(comm,(double)timeout);
+ }
+ CATCH_ANONYMOUS {
+ return;
+ }
if (status == MSG_OK) {
jcomm_bind_task(env,jcomm);
return;