OSDN Git Service

* java/lang/PosixProcess.java (exitValue): Implement here. Throw
authorbryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 24 Sep 2001 04:51:50 +0000 (04:51 +0000)
committerbryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 24 Sep 2001 04:51:50 +0000 (04:51 +0000)
IllegalThreadStateException if process hasn't exited yet.
* java/lang/natPosixProcess.cc (exitValue): Removed.
(waitFor): Only check thread interrupted status if waitpid()
returned an error. Use WIFEXITED and WEXITSTATUS to process process's
exit value.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@45766 138bc75d-0d04-0410-961f-82ee72b054a4

libjava/ChangeLog
libjava/java/lang/PosixProcess.java
libjava/java/lang/natPosixProcess.cc

index ff37f04..4cb62a8 100644 (file)
@@ -1,3 +1,12 @@
+2001-09-24  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+
+       * java/lang/PosixProcess.java (exitValue): Implement here. Throw 
+       IllegalThreadStateException if process hasn't exited yet.
+       * java/lang/natPosixProcess.cc (exitValue): Removed.
+       (waitFor): Only check thread interrupted status if waitpid() returned
+       an error. Use WIFEXITED and WEXITSTATUS to process process's exit
+       value.
+
 2001-09-22  Anthony Green  <green@redhat.com>
 
        * java/security/DummyKeyPairGenerator.java (initialize): New
index 3618259..459f76c 100644 (file)
@@ -26,7 +26,13 @@ import java.io.IOException;
 final class ConcreteProcess extends Process
 {
   public native void destroy ();
-  public native int exitValue ();
+
+  public int exitValue ()
+  {
+    if (! hasExited)
+      throw new IllegalThreadStateException("Process has not exited");
+    return status;
+  }
 
   public InputStream getErrorStream ()
   {
index 5cce967..516fb04 100644 (file)
@@ -49,27 +49,6 @@ java::lang::ConcreteProcess::destroy (void)
 }
 
 jint
-java::lang::ConcreteProcess::exitValue (void)
-{
-  if (! hasExited)
-    {
-      int wstat;
-      pid_t r = waitpid ((pid_t) pid, &wstat, WNOHANG);
-      if (r == -1)
-       {
-         jstring x = JvNewStringLatin1 (strerror (errno));
-         throw new IllegalThreadStateException (x);
-       }
-
-      hasExited = true;
-      // Just use the raw status.  FIXME: what is right?
-      status = wstat;
-    }
-
-  return status;
-}
-
-jint
 java::lang::ConcreteProcess::waitFor (void)
 {
   if (! hasExited)
@@ -77,15 +56,21 @@ java::lang::ConcreteProcess::waitFor (void)
       int wstat;
       int r = waitpid ((pid_t) pid, &wstat, 0);
 
-      if (r != -1)
+      if (r == -1)
+        {
+         if (java::lang::Thread::interrupted())
+           throw new InterruptedException (JvNewStringLatin1 (strerror
+             (errno)));
+       }
+      else
        {
          hasExited = true;
-         // Just use the raw status.  FIXME: what is right?
-         status = wstat;
-       }
 
-      if (java::lang::Thread::interrupted())
-       throw new InterruptedException (JvNewStringLatin1 ("wait interrupted"));
+         if (WIFEXITED (wstat))
+           status = WEXITSTATUS (wstat);
+         else
+           status = -1;
+       }
     }
 
   return status;