JNIEXPORT jobject JNICALL Java_org_simgrid_msg_Task_receive(JNIEnv * env, jclass cls, jstring jalias, jdouble jtimeout,
jobject jhost)
{
- msg_error_t rv;
- msg_task_t *task = xbt_new(msg_task_t,1);
- *task = NULL;
+ msg_task_t task = NULL;
msg_host_t host = NULL;
jobject jtask_global, jtask_local;
- const char *alias;
if (jhost) {
host = jhost_get_native(env, jhost);
}
}
- alias = env->GetStringUTFChars(jalias, 0);
- rv = MSG_task_receive_ext(task, alias, (double) jtimeout, host);
+ const char *alias = env->GetStringUTFChars(jalias, 0);
+ msg_error_t rv = MSG_task_receive_ext(&task, alias, (double) jtimeout, host);
if (env->ExceptionOccurred())
return NULL;
if (rv != MSG_OK) {
jmsg_throw_status(env,rv);
return NULL;
}
- jtask_global = (jobject) MSG_task_get_data(*task);
+ jtask_global = (jobject) MSG_task_get_data(task);
/* Convert the global ref into a local ref so that the JVM can free the stuff */
jtask_local = env->NewLocalRef(jtask_global);
env->DeleteGlobalRef(jtask_global);
- MSG_task_set_data(*task, NULL);
+ MSG_task_set_data(task, NULL);
env->ReleaseStringUTFChars(jalias, alias);
- xbt_free(task);
-
return (jobject) jtask_local;
}