X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/5e1b4fa835cedc144a2ebe97fda0d139d63d3058..d656f9465e7b1c36319f86eeafdcec58fe9551a4:/src/bindings/java/JavaContext.cpp diff --git a/src/bindings/java/JavaContext.cpp b/src/bindings/java/JavaContext.cpp index 6298d26cf5..695023d198 100644 --- a/src/bindings/java/JavaContext.cpp +++ b/src/bindings/java/JavaContext.cpp @@ -1,26 +1,21 @@ -/* context_java - implementation of context switching for java threads */ +/* Context switching within the JVM. */ -/* Copyright (c) 2009-2010, 2012-2014. The SimGrid Team. - * All rights reserved. */ +/* Copyright (c) 2009-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 "JavaContext.hpp" +#include "jxbt_utilities.hpp" +#include "src/simix/smx_private.hpp" +#include "xbt/ex.hpp" + #include #include -#include "JavaContext.hpp" -#include "jxbt_utilities.h" -#include "src/simix/smx_private.h" -#include "xbt/dynar.h" -#include -#include -#include -#include - -extern JavaVM *__java_vm; +extern "C" JavaVM* __java_vm; -XBT_LOG_NEW_DEFAULT_CATEGORY(jmsg, "MSG for Java(TM)"); +XBT_LOG_NEW_DEFAULT_CATEGORY(java, "MSG for Java(TM)"); namespace simgrid { namespace kernel { @@ -52,11 +47,8 @@ JavaContext* JavaContextFactory::create_context( void JavaContextFactory::run_all() { - xbt_dynar_t processes = SIMIX_process_get_runnable(); - smx_actor_t process; - unsigned int cursor; - xbt_dynar_foreach(processes, cursor, process) { - static_cast(SIMIX_process_get_context(process))->resume(); + for (smx_actor_t const& process : simgrid::simix::process_get_runnable()) { + static_cast(process->context)->resume(); } } @@ -111,10 +103,9 @@ void* JavaContext::wrapper(void *data) //Attach the thread to the JVM JNIEnv *env; - XBT_ATTRIB_UNUSED jint error = - __java_vm->AttachCurrentThread((void **)&env, nullptr); + XBT_ATTRIB_UNUSED jint error = __java_vm->AttachCurrentThread((void**)&env, nullptr); xbt_assert((error == JNI_OK), "The thread could not be attached to the JVM"); - context->jenv = get_current_thread_env(); + context->jenv = env; //Wait for the first scheduling round to happen. xbt_os_sem_acquire(context->begin); //Create the "Process" object if needed. @@ -139,7 +130,7 @@ void JavaContext::stop() // (as the ones created for the VM migration). The Java exception will not be catched anywhere. // Bad things happen currently if these actors get killed, unfortunately. jxbt_throw_by_name(env, "org/simgrid/msg/ProcessKilledError", - bprintf("Process %s killed from file JavaContext.cpp)", this->process()->name.c_str())); + std::string("Process ") + this->process()->getCname() + " killed from file JavaContext.cpp"); // (remember that throwing a java exception from C does not break the C execution path. // Instead, it marks the exception to be raised when returning to the Java world and