XBT_LOG_NEW_DEFAULT_CATEGORY(jmsg, "MSG for Java(TM)");
namespace simgrid {
-namespace java {
+namespace kernel {
+namespace context {
-simgrid::simix::ContextFactory* java_factory()
+ContextFactory* java_factory()
{
XBT_INFO("Using regular java threads.");
return new JavaContextFactory();
xbt_os_sem_acquire(this->end);
}
-}
-}
+}}} // namespace simgrid::kernel::context
#include "jmsg_process.h"
namespace simgrid {
-namespace java {
+namespace kernel {
+namespace context {
class JavaContext;
class JavacontextFactory;
-class JavaContext : public simgrid::simix::Context {
+class JavaContext : public simgrid::kernel::context::Context {
public:
// The java process instance bound with the msg process structure:
jobject jprocess = nullptr;
static void* wrapper(void *data);
};
-class JavaContextFactory : public simgrid::simix::ContextFactory {
+class JavaContextFactory : public simgrid::kernel::context::ContextFactory {
public:
JavaContextFactory();
~JavaContextFactory() override;
void run_all() override;
};
-XBT_PRIVATE simgrid::simix::ContextFactory* java_factory();
+XBT_PRIVATE simgrid::kernel::context::ContextFactory* java_factory();
XBT_PRIVATE void java_main_jprocess(jobject process);
-}
-}
+}}} // namespace simgrid::kernel::context
#endif /* !_XBT_CONTEXT_JAVA_H */
env->GetJavaVM(&__java_vm);
- simgrid::simix::factory_initializer = &simgrid::java::java_factory;
+ simgrid::kernel::context::factory_initializer = &simgrid::kernel::context::java_factory;
jthrowable exc = env->ExceptionOccurred();
if (exc) {
env->ExceptionClear();
static int java_main(int argc, char *argv[])
{
JNIEnv *env = get_current_thread_env();
- simgrid::java::JavaContext* context = static_cast<simgrid::java::JavaContext*>(SIMIX_context_self());
+ simgrid::kernel::context::JavaContext* context = static_cast<simgrid::kernel::context::JavaContext*>(SIMIX_context_self());
//Change the "." in class name for "/".
xbt_str_subst(argv[0],'.','/',0);
}
namespace simgrid {
-namespace java {
+namespace kernel {
+namespace context {
/** Run the Java org.simgrid.msg.Process */
void java_main_jprocess(jobject jprocess)
{
JNIEnv *env = get_current_thread_env();
- simgrid::java::JavaContext* context = static_cast<simgrid::java::JavaContext*>(SIMIX_context_self());
+ simgrid::kernel::context::JavaContext* context = static_cast<simgrid::kernel::context::JavaContext*>(SIMIX_context_self());
context->jprocess = jprocess;
smx_process_t process = SIMIX_process_self();
jprocess_bind(context->jprocess, process, env);
else
run_jprocess(env, context->jprocess);
}
-
-}
-}
+}}}
jobject native_to_java_process(msg_process_t process)
{
- simgrid::java::JavaContext* context = (simgrid::java::JavaContext*) MSG_process_get_smx_ctx(process);
+ simgrid::kernel::context::JavaContext* context = (simgrid::kernel::context::JavaContext*) MSG_process_get_smx_ctx(process);
return context->jprocess;
}
void jprocess_join(jobject jprocess, JNIEnv * env)
{
msg_process_t process = jprocess_to_native_process(jprocess,env);
- simgrid::java::JavaContext* context = (simgrid::java::JavaContext*) MSG_process_get_smx_ctx(process);
+ simgrid::kernel::context::JavaContext* context = (simgrid::kernel::context::JavaContext*) MSG_process_get_smx_ctx(process);
xbt_os_thread_join(context->thread,nullptr);
}
// This is the jprocess passed as environment.
// It would be simplet if we could use a closure.
jobject jprocess = (jobject) MSG_process_get_data(process);
- simgrid::java::java_main_jprocess(jprocess);
+ simgrid::kernel::context::java_main_jprocess(jprocess);
return 0;
}, jprocess,
host,
return (jint) MSG_process_get_number();
}
-}
+} // extern C
/** @brief Executes all the processes to run (in parallel if possible). */
XBT_PRIVATE void SIMIX_context_runall(void);
/** @brief returns the current running context */
-XBT_PRIVATE smx_context_t SIMIX_context_self(void);
+XBT_PUBLIC(smx_context_t) SIMIX_context_self(void); // public because it's used in simgrid-java
XBT_PRIVATE void *SIMIX_context_stack_new(void);
XBT_PRIVATE void SIMIX_context_stack_delete(void *stack);