Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge remote-tracking branch 'upstream/master' into issue95
[simgrid.git] / src / bindings / java / jmsg.cpp
index 9312ffd..bdc6661 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 2007-2020. The SimGrid Team. All rights reserved.          */
+/* Copyright (c) 2007-2021. 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 "simgrid/plugins/file_system.h"
 #include "simgrid/plugins/live_migration.h"
 #include "simgrid/plugins/load.h"
-#include "simgrid/simix.h"
 
+#include "simgrid/s4u/Actor.hpp"
 #include "simgrid/s4u/Host.hpp"
 
-#include "src/simix/smx_private.hpp"
-
 #include "jmsg.hpp"
 #include "jmsg_as.hpp"
 #include "jmsg_host.h"
 #include "jmsg_process.h"
-#include "jmsg_storage.h"
 #include "jmsg_task.h"
 #include "jxbt_utilities.hpp"
 
@@ -106,10 +103,9 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_Msg_init(JNIEnv* env, jclass, jobjec
 
   args.emplace_back("java");
   for (int index = 1; index < argc; index++) {
-    jstring jval    = (jstring)env->GetObjectArrayElement(jargs, index - 1);
-    const char* tmp = env->GetStringUTFChars(jval, 0);
-    args.emplace_back(tmp);
-    env->ReleaseStringUTFChars(jval, tmp);
+    auto jval       = (jstring)env->GetObjectArrayElement(jargs, index - 1);
+    jstring_wrapper tmp(env, jval);
+    args.emplace_back(tmp.value);
   }
 
   std::unique_ptr<char* []> argv(new char*[argc + 1]);
@@ -117,7 +113,7 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_Msg_init(JNIEnv* env, jclass, jobjec
   argv[argc] = nullptr;
 
   int argc2 = argc;
-  simgrid_init(&argc2, argv.get());
+  MSG_init(&argc2, argv.get());
   xbt_assert(argc2 <= argc);
 
   for (int index = 1; index < argc2; index++)
@@ -138,16 +134,12 @@ JNIEXPORT void JNICALL JNICALL Java_org_simgrid_msg_Msg_run(JNIEnv* env, jclass)
   sg_host_t* hosts  = sg_host_list();
   size_t host_count = sg_host_count();
   for (size_t index = 0; index < host_count - 1; index++) {
-    jobject jhost = (jobject)hosts[index]->extension(JAVA_HOST_LEVEL);
+    auto jhost = (jobject)hosts[index]->extension(JAVA_HOST_LEVEL);
     if (jhost)
       jhost_unref(env, jhost);
   }
   xbt_free(hosts);
 
-  /* Cleanup java storages */
-  for (auto const& elm : java_storage_map)
-    jstorage_unref(env, elm.second);
-
   /* Display the status of remaining threads. None should survive, but who knows */
   jclass clsProcess = jxbt_get_class(env, "org/simgrid/msg/Process");
   jmethodID idDebug = jxbt_get_static_jmethod(env, clsProcess, "debugAllThreads", "()V");
@@ -157,11 +149,8 @@ JNIEXPORT void JNICALL JNICALL Java_org_simgrid_msg_Msg_run(JNIEnv* env, jclass)
 
 JNIEXPORT void JNICALL Java_org_simgrid_msg_Msg_createEnvironment(JNIEnv* env, jclass, jstring jplatformFile)
 {
-  const char *platformFile = env->GetStringUTFChars(jplatformFile, 0);
-
+  jstring_wrapper platformFile(env, jplatformFile);
   simgrid_load_platform(platformFile);
-
-  env->ReleaseStringUTFChars(jplatformFile, platformFile);
 }
 
 JNIEXPORT jobject JNICALL Java_org_simgrid_msg_Msg_environmentGetRoutingRoot(JNIEnv* env, jclass)
@@ -184,51 +173,45 @@ JNIEXPORT jobject JNICALL Java_org_simgrid_msg_Msg_environmentGetRoutingRoot(JNI
 
 JNIEXPORT void JNICALL Java_org_simgrid_msg_Msg_debug(JNIEnv* env, jclass, jstring js)
 {
-  const char *s = env->GetStringUTFChars(js, 0);
-  XBT_DEBUG("%s", s);
-  env->ReleaseStringUTFChars(js, s);
+  jstring_wrapper s(env, js);
+  XBT_DEBUG("%s", s.value);
 }
 
 JNIEXPORT void JNICALL Java_org_simgrid_msg_Msg_verb(JNIEnv* env, jclass, jstring js)
 {
-  const char *s = env->GetStringUTFChars(js, 0);
-  XBT_VERB("%s", s);
-  env->ReleaseStringUTFChars(js, s);
+  jstring_wrapper s(env, js);
+  XBT_VERB("%s", s.value);
 }
 
 JNIEXPORT void JNICALL Java_org_simgrid_msg_Msg_info(JNIEnv* env, jclass, jstring js)
 {
-  const char *s = env->GetStringUTFChars(js, 0);
-  XBT_INFO("%s", s);
-  env->ReleaseStringUTFChars(js, s);
+  jstring_wrapper s(env, js);
+  XBT_INFO("%s", s.value);
 }
 
 JNIEXPORT void JNICALL Java_org_simgrid_msg_Msg_warn(JNIEnv* env, jclass, jstring js)
 {
-  const char *s = env->GetStringUTFChars(js, 0);
-  XBT_WARN("%s", s);
-  env->ReleaseStringUTFChars(js, s);
+  jstring_wrapper s(env, js);
+  XBT_WARN("%s", s.value);
 }
 
 JNIEXPORT void JNICALL Java_org_simgrid_msg_Msg_error(JNIEnv* env, jclass, jstring js)
 {
-  const char *s = env->GetStringUTFChars(js, 0);
-  XBT_ERROR("%s", s);
-  env->ReleaseStringUTFChars(js, s);
+  jstring_wrapper s(env, js);
+  XBT_ERROR("%s", s.value);
 }
 
 JNIEXPORT void JNICALL Java_org_simgrid_msg_Msg_critical(JNIEnv* env, jclass, jstring js)
 {
-  const char *s = env->GetStringUTFChars(js, 0);
-  XBT_CRITICAL("%s", s);
-  env->ReleaseStringUTFChars(js, s);
+  jstring_wrapper s(env, js);
+  XBT_CRITICAL("%s", s.value);
 }
 
 static void java_main(int argc, char* argv[]);
 
 JNIEXPORT void JNICALL Java_org_simgrid_msg_Msg_deployApplication(JNIEnv* env, jclass, jstring jdeploymentFile)
 {
-  const char *deploymentFile = env->GetStringUTFChars(jdeploymentFile, 0);
+  jstring_wrapper deploymentFile(env, jdeploymentFile);
 
   simgrid_register_default(java_main);
   simgrid_load_deployment(deploymentFile);
@@ -238,11 +221,6 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_Msg_energyInit() {
   sg_host_energy_plugin_init();
 }
 
-JNIEXPORT void JNICALL Java_org_simgrid_msg_Msg_fileSystemInit()
-{
-  sg_storage_file_system_init();
-}
-
 JNIEXPORT void JNICALL Java_org_simgrid_msg_Msg_loadInit() {
     sg_host_load_plugin_init();
 }
@@ -267,8 +245,7 @@ static void run_jprocess(JNIEnv *env, jobject jprocess)
   if (env->ExceptionOccurred()) {
     XBT_DEBUG("Something went wrong in this Java actor, forget about it.");
     env->ExceptionClear();
-    XBT_ATTRIB_UNUSED jint error = __java_vm->DetachCurrentThread();
-    xbt_assert(error == JNI_OK, "Cannot detach failing thread");
+    xbt_assert(__java_vm->DetachCurrentThread() == JNI_OK, "Cannot detach failing thread");
     simgrid::ForcefulKillException::do_throw();
   }
 }
@@ -277,8 +254,7 @@ static void run_jprocess(JNIEnv *env, jobject jprocess)
 static void java_main(int argc, char* argv[])
 {
   JNIEnv *env = get_current_thread_env();
-  simgrid::kernel::context::JavaContext* context =
-      static_cast<simgrid::kernel::context::JavaContext*>(simgrid::kernel::context::Context::self());
+  auto* context = static_cast<simgrid::kernel::context::JavaContext*>(simgrid::kernel::context::Context::self());
 
   //Change the "." in class name for "/".
   std::string arg0 = argv[0];
@@ -292,8 +268,8 @@ static void java_main(int argc, char* argv[])
   //Retrieve the name of the process.
   jstring jname = env->NewStringUTF(argv[0]);
   //Build the arguments
-  jobjectArray args = static_cast<jobjectArray>(env->NewObjectArray(argc - 1, env->FindClass("java/lang/String"),
-                                                                    env->NewStringUTF("")));
+  auto args = static_cast<jobjectArray>(
+      env->NewObjectArray(argc - 1, env->FindClass("java/lang/String"), env->NewStringUTF("")));
   for (int i = 1; i < argc; i++)
       env->SetObjectArrayElement(args,i - 1, env->NewStringUTF(argv[i]));
   //Retrieve the host for the process.
@@ -323,7 +299,7 @@ namespace context {
 void java_main_jprocess(jobject jprocess)
 {
   JNIEnv *env = get_current_thread_env();
-  JavaContext* context = static_cast<JavaContext*>(Context::self());
+  auto* context        = static_cast<JavaContext*>(Context::self());
   context->jprocess_   = jprocess;
   jprocess_bind(context->jprocess_, sg_actor_self(), env);