Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
plug two memleaks
[simgrid.git] / src / bindings / java / jmsg_host.cpp
index 09f12e4..938391c 100644 (file)
@@ -1,27 +1,21 @@
 /* Functions related to the java host instances.                            */
 
-/* Copyright (c) 2007-2015. The SimGrid Team.
- * All rights reserved.                                                     */
+/* Copyright (c) 2007-2017. The SimGrid Team. All rights reserved.          */
 
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
-#include <xbt/dict.h>
-#include <xbt/dynar.h>
-#include <xbt/log.h>
-#include <xbt/str.h>
-
-#include <surf/surf_routing.h>
-
-#include <simgrid/s4u/host.hpp>
+#include "simgrid/plugins/energy.h"
+#include "simgrid/s4u/host.hpp"
 
-#include "simgrid/msg.h"
 #include "jmsg.h"
 #include "jmsg_host.h"
 #include "jxbt_utilities.h"
 #include "jmsg_storage.h"
 
-XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(jmsg);
+XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(java);
+
+SG_BEGIN_DECL()
 
 static jmethodID jhost_method_Host_constructor;
 static jfieldID jhost_field_Host_bind;
@@ -48,27 +42,13 @@ msg_host_t jhost_get_native(JNIEnv * env, jobject jhost) {
   return (msg_host_t) (uintptr_t) env->GetLongField(jhost, jhost_field_Host_bind);
 }
 
-const char *jhost_get_name(jobject jhost, JNIEnv * env) {
-  msg_host_t host = jhost_get_native(env, jhost);
-  return host->cname();
-}
-
-jboolean jhost_is_valid(jobject jhost, JNIEnv * env) {
-  if (env->GetLongField(jhost, jhost_field_Host_bind)) {
-    return JNI_TRUE;
-  } else {
-    return JNI_FALSE;
-  }
-}
-
 JNIEXPORT void JNICALL Java_org_simgrid_msg_Host_nativeInit(JNIEnv *env, jclass cls) {
   jclass class_Host = env->FindClass("org/simgrid/msg/Host");
   jhost_method_Host_constructor = env->GetMethodID(class_Host, "<init>", "()V");
   jhost_field_Host_bind = jxbt_get_jfield(env,class_Host, "bind", "J");
   jhost_field_Host_name = jxbt_get_jfield(env, class_Host, "name", "Ljava/lang/String;");
-  if (!class_Host || !jhost_field_Host_name || !jhost_method_Host_constructor || !jhost_field_Host_bind) {
-    jxbt_throw_native(env,bprintf("Can't find some fields in Java class. You should report this bug."));
-  }
+  xbt_assert(class_Host && jhost_field_Host_name && jhost_method_Host_constructor && jhost_field_Host_bind,
+             "Native initialization of msg/Host failed. Please report that bug");
 }
 
 JNIEXPORT jobject JNICALL Java_org_simgrid_msg_Host_getByName(JNIEnv * env, jclass cls, jstring jname) {
@@ -292,15 +272,13 @@ JNIEXPORT jobjectArray JNICALL Java_org_simgrid_msg_Host_getAttachedStorage(JNIE
   }
   jobjectArray jtable;
 
-  xbt_dynar_t dyn = MSG_host_get_attached_storage_list(host);
-  int count = xbt_dynar_length(dyn);
-  jclass cls = jxbt_get_class(env, "java/lang/String");
-  jtable = env->NewObjectArray((jsize) count, cls, nullptr);
-  int index;
-  char *storage_name;
+  xbt_dynar_t dyn = sg_host_get_attached_storage_list(host);
+  jclass cls      = jxbt_get_class(env, "java/lang/String");
+  jtable          = env->NewObjectArray(static_cast<jsize>(xbt_dynar_length(dyn)), cls, nullptr);
+  unsigned int index;
+  const char* storage_name;
   jstring jstorage_name;
-  for (index = 0; index < count; index++) {
-    storage_name = xbt_dynar_get_as(dyn,index,char*);
+  xbt_dynar_foreach (dyn, index, storage_name) {
     jstorage_name = env->NewStringUTF(storage_name);
     env->SetObjectArrayElement(jtable, index, jstorage_name);
   }
@@ -321,37 +299,28 @@ JNIEXPORT jobjectArray JNICALL Java_org_simgrid_msg_Host_getStorageContent(JNIEn
 
 JNIEXPORT jobjectArray JNICALL Java_org_simgrid_msg_Host_all(JNIEnv * env, jclass cls_arg)
 {
-  int index;
-  jobjectArray jtable;
-  jobject jhost;
-  jstring jname;
-  msg_host_t host;
 
   xbt_dynar_t table =  MSG_hosts_as_dynar();
   int count = xbt_dynar_length(table);
 
   jclass cls = jxbt_get_class(env, "org/simgrid/msg/Host");
-
-  if (!cls) {
+  if (!cls)
     return nullptr;
-  }
 
-  jtable = env->NewObjectArray((jsize) count, cls, nullptr);
+  jobjectArray jtable = env->NewObjectArray((jsize)count, cls, nullptr);
 
   if (!jtable) {
     jxbt_throw_jni(env, "Hosts table allocation failed");
     return nullptr;
   }
 
-  for (index = 0; index < count; index++) {
-    host = xbt_dynar_get_as(table,index,msg_host_t);
-    jhost = (jobject) host->extension(JAVA_HOST_LEVEL);
+  for (int index = 0; index < count; index++) {
+    msg_host_t host = xbt_dynar_get_as(table, index, msg_host_t);
+    jobject jhost   = static_cast<jobject>(host->extension(JAVA_HOST_LEVEL));
 
     if (!jhost) {
-      jname = env->NewStringUTF(host->cname());
-
-      jhost = Java_org_simgrid_msg_Host_getByName(env, cls_arg, jname);
-      /* FIXME: leak of jname ? */
+      jstring jname = env->NewStringUTF(host->cname());
+      jhost         = Java_org_simgrid_msg_Host_getByName(env, cls_arg, jname);
     }
 
     env->SetObjectArrayElement(jtable, index, jhost);
@@ -367,7 +336,6 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_Host_setAsyncMailbox(JNIEnv * env, j
   env->ReleaseStringUTFChars((jstring) jname, name);
 }
 
-#include "simgrid/plugins/energy.h"
 JNIEXPORT jdouble JNICALL Java_org_simgrid_msg_Host_getConsumedEnergy (JNIEnv *env, jobject jhost)
 {
   msg_host_t host = jhost_get_native(env, jhost);
@@ -405,3 +373,5 @@ JNIEXPORT jdouble JNICALL Java_org_simgrid_msg_Host_getPowerPeakAt(JNIEnv* env,
   msg_host_t host = jhost_get_native(env, jhost);
   return MSG_host_get_power_peak_at(host, pstate);
 }
+
+SG_END_DECL()