X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/a96479d66281806d9e372a705a1bdf4ebf6f8c84..74c1bf2b26c5a3aa0d8c29674dc12993e7c0de15:/src/bindings/java/jmsg.cpp diff --git a/src/bindings/java/jmsg.cpp b/src/bindings/java/jmsg.cpp index 389a671835..09d41702e3 100644 --- a/src/bindings/java/jmsg.cpp +++ b/src/bindings/java/jmsg.cpp @@ -5,15 +5,15 @@ /* 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 +#include -#include -#include -#include +#include "simgrid/msg.h" +#include "simgrid/plugins/energy.h" +#include "simgrid/simix.h" -#include +#include "simgrid/s4u/Host.hpp" -#include +#include "src/simix/smx_private.h" #include "jmsg_process.h" #include "jmsg_as.h" @@ -39,9 +39,8 @@ SG_BEGIN_DECL() int JAVA_HOST_LEVEL = -1; -int JAVA_STORAGE_LEVEL = -1; -XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(jmsg); +XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(java); JavaVM *__java_vm = nullptr; @@ -60,17 +59,17 @@ JNIEnv *get_current_thread_env() void jmsg_throw_status(JNIEnv *env, msg_error_t status) { switch (status) { case MSG_TIMEOUT: - jxbt_throw_time_out_failure(env,nullptr); - break; + jxbt_throw_time_out_failure(env, ""); + break; case MSG_TRANSFER_FAILURE: - jxbt_throw_transfer_failure(env,nullptr); - break; + jxbt_throw_transfer_failure(env, ""); + break; case MSG_HOST_FAILURE: - jxbt_throw_host_failure(env,nullptr); - break; + jxbt_throw_host_failure(env, ""); + break; case MSG_TASK_CANCELED: - jxbt_throw_task_cancelled(env,nullptr); - break; + jxbt_throw_task_cancelled(env, ""); + break; default: xbt_die("undefined message failed (please see jmsg_throw_status function in jmsg.cpp)"); } @@ -89,19 +88,11 @@ static void __JAVA_host_priv_free(void *host) { } -static void __JAVA_storage_priv_free(void *storage) -{ -} - JNIEXPORT void JNICALL Java_org_simgrid_msg_Msg_init(JNIEnv * env, jclass cls, jobjectArray jargs) { - char **argv = nullptr; - int index; int argc = 0; - jstring jval; - const char *tmp; - XBT_LOG_CONNECT(jmsg); + XBT_LOG_CONNECT(java); XBT_LOG_CONNECT(jtrace); env->GetJavaVM(&__java_vm); @@ -115,15 +106,15 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_Msg_init(JNIEnv * env, jclass cls, j setlocale(LC_NUMERIC,"C"); if (jargs) - argc = (int) env->GetArrayLength(jargs); + argc = static_cast(env->GetArrayLength(jargs)); argc++; - argv = xbt_new(char *, argc + 1); + char** argv = new char*[argc + 1]; argv[0] = xbt_strdup("java"); - for (index = 0; index < argc - 1; index++) { - jval = (jstring) env->GetObjectArrayElement(jargs, index); - tmp = env->GetStringUTFChars(jval, 0); + for (int index = 0; index < argc - 1; index++) { + jstring jval = (jstring)env->GetObjectArrayElement(jargs, index); + const char* tmp = env->GetStringUTFChars(jval, 0); argv[index + 1] = xbt_strdup(tmp); env->ReleaseStringUTFChars(jval, tmp); } @@ -132,12 +123,13 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_Msg_init(JNIEnv * env, jclass cls, j MSG_init(&argc, argv); JAVA_HOST_LEVEL = simgrid::s4u::Host::extension_create(__JAVA_host_priv_free); - JAVA_STORAGE_LEVEL = xbt_lib_add_level(storage_lib, __JAVA_storage_priv_free); - for (index = 0; index < argc; index++) + for (int index = 0; index < argc - 1; index++) { + env->SetObjectArrayElement(jargs, index, (jstring)env->NewStringUTF(argv[index + 1])); free(argv[index]); - - free(argv); + } + free(argv[argc]); + delete[] argv; } JNIEXPORT void JNICALL JNICALL Java_org_simgrid_msg_Msg_run(JNIEnv * env, jclass cls) @@ -162,15 +154,8 @@ JNIEXPORT void JNICALL JNICALL Java_org_simgrid_msg_Msg_run(JNIEnv * env, jclass xbt_dynar_free(&hosts); /* Cleanup java storages */ - xbt_dynar_t storages = MSG_storages_as_dynar(); - if(!xbt_dynar_is_empty(storages)){ - for (unsigned long index = 0; index < xbt_dynar_length(storages) - 1; index++) { - jobject jstorage = (jobject) xbt_lib_get_level(xbt_dynar_get_as(storages,index,msg_storage_t), JAVA_STORAGE_LEVEL); - if (jstorage) - jstorage_unref(env, jstorage); - } - } - xbt_dynar_free(&storages); + for (auto const& elm : java_storage_map) + jstorage_unref(env, elm.second); } JNIEXPORT void JNICALL Java_org_simgrid_msg_Msg_createEnvironment(JNIEnv * env, jclass cls, jstring jplatformFile) @@ -184,14 +169,14 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_Msg_createEnvironment(JNIEnv * env, JNIEXPORT jobject JNICALL Java_org_simgrid_msg_Msg_environmentGetRoutingRoot(JNIEnv * env, jclass cls) { - msg_netzone_t as = MSG_environment_get_routing_root(); + msg_netzone_t as = MSG_zone_get_root(); jobject jas = jnetzone_new_instance(env); - if (!jas) { + if (not jas) { jxbt_throw_jni(env, "java As instantiation failed"); return nullptr; } jas = jnetzone_ref(env, jas); - if (!jas) { + if (not jas) { jxbt_throw_jni(env, "new global ref allocation failed"); return nullptr; } @@ -300,7 +285,7 @@ static int java_main(int argc, char *argv[]) for (int i = 1; i < argc; i++) env->SetObjectArrayElement(args,i - 1, env->NewStringUTF(argv[i])); //Retrieve the host for the process. - jstring jhostName = env->NewStringUTF(MSG_host_self()->cname()); + jstring jhostName = env->NewStringUTF(MSG_host_self()->getCname()); jobject jhost = Java_org_simgrid_msg_Host_getByName(env, nullptr, jhostName); //creates the process jobject jprocess = env->NewObject(class_Process, constructor_Process, jhost, jname, args); @@ -329,11 +314,8 @@ void java_main_jprocess(jobject jprocess) JNIEnv *env = get_current_thread_env(); simgrid::kernel::context::JavaContext* context = static_cast(SIMIX_context_self()); context->jprocess = jprocess; - smx_actor_t process = SIMIX_process_self(); - jprocess_bind(context->jprocess, process, env); + jprocess_bind(context->jprocess, MSG_process_self(), env); - // Adrien, ugly path, just to bypass creation of context at low levels (i.e such as for the VM migration for instance) - if (context->jprocess != nullptr) - run_jprocess(env, context->jprocess); + run_jprocess(env, context->jprocess); } }}}