Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Modernize FindSimGrid
[simgrid.git] / src / bindings / java / org / simgrid / msg / Process.java
index e4c7900..6c06550 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 2006-2017. The SimGrid Team. All rights reserved.          */
+/* Copyright (c) 2006-2018. 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. */
@@ -107,9 +107,9 @@ public abstract class Process implements Runnable {
         *
         * @param host                  Where to create the process.
         * @param name                  The name of the process.
-        * @param args                  The arguments of main method of the process.
+        * @param argsParam             The arguments of main method of the process.
         */     
-       public Process(Host host, String name, String[]args) 
+       public Process(Host host, String name, String[]argsParam
        {
                if (host == null)
                        throw new IllegalArgumentException("Cannot create a process on the null host");
@@ -120,8 +120,8 @@ public abstract class Process implements Runnable {
                this.name = name;
 
                this.args = new ArrayList<>();
-               if (null != args)
-                       this.args.addAll(Arrays.asList(args));
+               if (null != argsParam)
+                       this.args.addAll(Arrays.asList(argsParam));
        }
        /**
         * Constructs a new process from a host and his name, the arguments of here method function are
@@ -217,8 +217,13 @@ public abstract class Process implements Runnable {
         *
         */ 
        public int getPID()  {
+               if (pid == -1) // Don't traverse the JNI barrier if you already have the answer
+                       pid = nativeGetPID(); 
                return pid;
        }
+       // This should not be used: the PID is supposed to be initialized from the C directly when the actor is created,
+       // but this sometimes fail, so let's play nasty but safe here.
+       private native int nativeGetPID();
        /**
         * This method returns the PID of the parent of a process.
         *
@@ -290,15 +295,11 @@ public abstract class Process implements Runnable {
        @Override
        public void run() {
 
-               String[] args = null;      /* do not fill it before the signal or this.args will be empty */
-
                try {
-                       args = new String[this.args.size()];
-                       if (!this.args.isEmpty()) {
-                               this.args.toArray(args);
-                       }
+                       String[] argsArray = new String[this.args.size()];
+                       this.args.toArray(argsArray);
 
-                       this.main(args);
+                       this.main(argsArray);
                }
                catch(MsgException e) {
                        e.printStackTrace();