From c1a801890b53e18c22319f0d875db0f75711776f Mon Sep 17 00:00:00 2001 From: Martin Quinson Date: Tue, 1 May 2012 00:06:22 +0200 Subject: [PATCH] work around issues by passing the hostname instead of the host to processCreate() --- org/simgrid/msg/ApplicationHandler.java | 3 +-- org/simgrid/msg/MsgNative.java | 2 +- org/simgrid/msg/Process.java | 6 +++++- src/jmsg.c | 14 +++++++++----- 4 files changed, 16 insertions(+), 9 deletions(-) diff --git a/org/simgrid/msg/ApplicationHandler.java b/org/simgrid/msg/ApplicationHandler.java index 4f0951b271..ae57e0f768 100644 --- a/org/simgrid/msg/ApplicationHandler.java +++ b/org/simgrid/msg/ApplicationHandler.java @@ -102,9 +102,8 @@ public final class ApplicationHandler { Process process = cls.newInstance(); process.name = function; process.id = org.simgrid.msg.Process.nextProcessId++; - Host host = Host.getByName(hostName); - MsgNative.processCreate(process, host); + MsgNative.processCreate(process, hostName); Vector args_ = args; int size = args_.size(); diff --git a/org/simgrid/msg/MsgNative.java b/org/simgrid/msg/MsgNative.java index 3f3df2128a..3c11df804f 100644 --- a/org/simgrid/msg/MsgNative.java +++ b/org/simgrid/msg/MsgNative.java @@ -32,7 +32,7 @@ final class MsgNative { * @see Process constructors. */ final static native - void processCreate(Process process, Host host); + void processCreate(Process process, String hostName) throws HostNotFoundException; /** * The natively implemented method to kill all the process of the simulation. diff --git a/org/simgrid/msg/Process.java b/org/simgrid/msg/Process.java index 7289d96123..10591d3595 100644 --- a/org/simgrid/msg/Process.java +++ b/org/simgrid/msg/Process.java @@ -185,7 +185,11 @@ public abstract class Process extends Thread { if (null != args) this.args.addAll(Arrays.asList(args)); - MsgNative.processCreate(this, host); + try { + MsgNative.processCreate(this, host.getName()); + } catch (HostNotFoundException e) { + throw new RuntimeException("The impossible happend (yet again): the host that I have were not found",e); + } } diff --git a/src/jmsg.c b/src/jmsg.c index 0c1bbc2fd0..31ae4d696c 100644 --- a/src/jmsg.c +++ b/src/jmsg.c @@ -61,18 +61,21 @@ static jobject native_to_java_process(m_process_t process) JNIEXPORT void JNICALL Java_org_simgrid_msg_MsgNative_processCreate(JNIEnv * env, jclass cls, jobject jprocess_arg, - jobject jhost) + jobject jhostname) { jobject jprocess; /* the global reference to the java process instance */ jstring jname; /* the name of the java process instance */ const char *name; /* the C name of the process */ + const char *hostname; m_process_t process; /* the native process to create */ m_host_t host; /* Where that process lives */ - XBT_DEBUG("Java_org_simgrid_msg_MsgNative_processCreate(env=%p,cls=%p,jproc=%p,jhost=%p)", - env, cls, jprocess_arg, jhost); + hostname = (*env)->GetStringUTFChars(env, jhostname, 0); + + XBT_DEBUG("Java_org_simgrid_msg_MsgNative_processCreate(env=%p,cls=%p,jproc=%p,host=%s)", + env, cls, jprocess_arg, hostname); /* get the name of the java process */ @@ -84,10 +87,10 @@ Java_org_simgrid_msg_MsgNative_processCreate(JNIEnv * env, jclass cls, } /* bind/retrieve the msg host */ - host = jhost_get_native(env, jhost); + host = MSG_get_host_by_name(hostname); if (!(host)) { /* not binded */ - jxbt_throw_notbound(env, "host", jhost); + jxbt_throw_host_not_found(env, hostname); return; } @@ -116,6 +119,7 @@ Java_org_simgrid_msg_MsgNative_processCreate(JNIEnv * env, jclass cls, /* release our reference to the process name (variable name becomes invalid) */ //FIXME : This line should be uncommented but with mac it doesn't work. BIG WARNING //(*env)->ReleaseStringUTFChars(env, jname, name); + (*env)->ReleaseStringUTFChars(env, jhostname, hostname); /* bind the java process instance to the native process */ jprocess_bind(jprocess, process, env); -- 2.20.1