Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[java] Delcare some local variables where they are used
[simgrid.git] / src / bindings / java / jmsg_task.c
index 850a999..f9352b2 100644 (file)
@@ -1,6 +1,6 @@
 /* Functions related to the java task instances.                            */
 
-/* Copyright (c) 2007, 2009-2010, 2013-2014. The SimGrid Team.
+/* Copyright (c) 2007, 2009-2010, 2013-2015. The SimGrid Team.
  * All rights reserved.                                                     */
 
 /* This program is free software; you can redistribute it and/or modify it
@@ -8,8 +8,6 @@
 
 #include "jmsg.h"
 
-#include "smx_context_java.h"
-
 #include "jmsg_host.h"
 #include "jmsg_task.h"
 
@@ -19,6 +17,8 @@
 
 XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(jmsg);
 
+jobject native_to_java_process(msg_process_t process);
+
 static jmethodID jtask_method_Comm_constructor;
 
 static jfieldID jtask_field_Task_bind;
@@ -482,8 +482,8 @@ Java_org_simgrid_msg_Task_irecv(JNIEnv * env, jclass cls, jstring jmailbox) {
 
        comm = MSG_task_irecv(task,mailbox);
 
-       (*env)->SetLongField(env, jcomm, jtask_field_Comm_bind, (jlong) (long)(comm));
-       (*env)->SetLongField(env, jcomm, jtask_field_Comm_taskBind, (jlong) (long)(task));
+       (*env)->SetLongField(env, jcomm, jtask_field_Comm_bind, (jlong) (uintptr_t)(comm));
+       (*env)->SetLongField(env, jcomm, jtask_field_Comm_taskBind, (jlong) (uintptr_t)(task));
        (*env)->SetBooleanField(env, jcomm, jtask_field_Comm_receiving, JNI_TRUE);
 
        (*env)->ReleaseStringUTFChars(env, jmailbox, mailbox);
@@ -564,8 +564,8 @@ Java_org_simgrid_msg_Task_irecvBounded(JNIEnv * env, jclass cls,
 
        comm = MSG_task_irecv_bounded(task,mailbox, (double) rate);
 
-       (*env)->SetLongField(env, jcomm, jtask_field_Comm_bind, (jlong) (long)(comm));
-       (*env)->SetLongField(env, jcomm, jtask_field_Comm_taskBind, (jlong) (long)(task));
+       (*env)->SetLongField(env, jcomm, jtask_field_Comm_bind, (jlong) (uintptr_t)(comm));
+       (*env)->SetLongField(env, jcomm, jtask_field_Comm_taskBind, (jlong) (uintptr_t)(task));
        (*env)->SetBooleanField(env, jcomm, jtask_field_Comm_receiving, JNI_TRUE);
 
        (*env)->ReleaseStringUTFChars(env, jmailbox, mailbox);
@@ -603,8 +603,8 @@ Java_org_simgrid_msg_Task_isend(JNIEnv *env, jobject jtask, jstring jmailbox) {
 MSG_task_set_data(task, (void *) (*env)->NewGlobalRef(env, jtask));
   comm = MSG_task_isend(task,mailbox);
 
-  (*env)->SetLongField(env, jcomm, jtask_field_Comm_bind, (jlong) (long)(comm));
-  (*env)->SetLongField(env, jcomm, jtask_field_Comm_taskBind, (jlong) (long)(NULL));
+  (*env)->SetLongField(env, jcomm, jtask_field_Comm_bind, (jlong) (uintptr_t)(comm));
+  (*env)->SetLongField(env, jcomm, jtask_field_Comm_taskBind, (jlong) (uintptr_t)(NULL));
   (*env)->SetBooleanField(env, jcomm, jtask_field_Comm_receiving, JNI_FALSE);
 
   (*env)->ReleaseStringUTFChars(env, jmailbox, mailbox);
@@ -642,8 +642,8 @@ Java_org_simgrid_msg_Task_isendBounded(JNIEnv *env, jobject jtask, jstring jmail
 MSG_task_set_data(task, (void *) (*env)->NewGlobalRef(env, jtask));
   comm = MSG_task_isend_bounded(task,mailbox,maxrate);
 
-  (*env)->SetLongField(env, jcomm, jtask_field_Comm_bind, (jlong) (long)(comm));
-  (*env)->SetLongField(env, jcomm, jtask_field_Comm_taskBind, (jlong) (long)(NULL));
+  (*env)->SetLongField(env, jcomm, jtask_field_Comm_bind, (jlong) (uintptr_t)(comm));
+  (*env)->SetLongField(env, jcomm, jtask_field_Comm_taskBind, (jlong) (uintptr_t)(NULL));
   (*env)->SetBooleanField(env, jcomm, jtask_field_Comm_receiving, JNI_FALSE);
 
   (*env)->ReleaseStringUTFChars(env, jmailbox, mailbox);
@@ -651,7 +651,17 @@ MSG_task_set_data(task, (void *) (*env)->NewGlobalRef(env, jtask));
   return jcomm;
 }
 
+JNIEXPORT void JNICALL
+Java_org_simgrid_msg_Task_nativeFinalize(JNIEnv * env, jobject jtask) {
+         msg_task_t task = jtask_to_native_task(jtask, env);
 
+         if (!task) {
+           jxbt_throw_notbound(env, "task", jtask);
+           return;
+         }
+
+         MSG_task_destroy(task);
+}
 
 static void msg_task_cancel_on_failed_dsend(void*t) {
   msg_task_t task = t;