diff options
-rw-r--r-- | libjava/ChangeLog | 8 | ||||
-rw-r--r-- | libjava/include/name-finder.h | 10 | ||||
-rw-r--r-- | libjava/java/lang/Throwable.java | 7 | ||||
-rw-r--r-- | libjava/name-finder.cc | 8 |
4 files changed, 26 insertions, 7 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 165b56d3358..1361abe40a0 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,11 @@ +2000-05-30 Tom Tromey <tromey@cygnus.com> + + * include/name-finder.h: Include <sys/wait.h>. + (_Jv_name_finder::pid): Now of type `pid_t'. + (_Jv_name_finder::~_Jv_name_finder): Call waitpid(). + * java/lang/Throwable.java (CPlusPlusDemangler.close): Call + `proc.waitFor()'. + 2000-05-24 Warren Levy <warrenl@cygnus.com> * java/io/ObjectOutputStream.java (writeObject): Use component type diff --git a/libjava/include/name-finder.h b/libjava/include/name-finder.h index 9a1d7dfdaac..2d2ab9f4f6e 100644 --- a/libjava/include/name-finder.h +++ b/libjava/include/name-finder.h @@ -17,6 +17,7 @@ details. */ #include <jvm.h> #include <sys/types.h> +#include <sys/wait.h> #include <string.h> #include <stdio.h> @@ -38,8 +39,12 @@ public: #if defined (HAVE_PIPE) && defined (HAVE_FORK) close (f_pipe[1]); fclose (b_pipe_fd); + + int wstat; + // We don't care about errors here. + waitpid (pid, &wstat, 0); #endif - } + } /* Given a pointer to a function or method, try to convert it into a name and the appropriate line and source file. The caller passes @@ -60,10 +65,9 @@ public: private: void toHex (void *p); #if defined (HAVE_PIPE) && defined (HAVE_FORK) - int pid; + pid_t pid; int f_pipe[2], b_pipe[2]; FILE *b_pipe_fd; int error; #endif }; - diff --git a/libjava/java/lang/Throwable.java b/libjava/java/lang/Throwable.java index 9892dd2cae4..db57deb69be 100644 --- a/libjava/java/lang/Throwable.java +++ b/libjava/java/lang/Throwable.java @@ -88,6 +88,13 @@ class CPlusPlusDemangler extends OutputStream written++; } p.flush (); + try + { + proc.waitFor (); + } + catch (InterruptedException _) + { + } } } diff --git a/libjava/name-finder.cc b/libjava/name-finder.cc index ab028af33cd..00857934e3e 100644 --- a/libjava/name-finder.cc +++ b/libjava/name-finder.cc @@ -78,7 +78,7 @@ _Jv_name_finder::_Jv_name_finder (char *executable) error |= pipe (f_pipe) < 0; error |= pipe (b_pipe) < 0; - + if (error) return; @@ -92,16 +92,16 @@ _Jv_name_finder::_Jv_name_finder (char *executable) execvp (argv[0], argv); _exit (127); } - + close (f_pipe [0]); close (b_pipe [1]); - + if (pid < 0) { error |= 1; return; } - + b_pipe_fd = fdopen (b_pipe[0], "r"); error |= !b_pipe_fd; #endif |