In message "Re: [kaffe] Pipes kept open after executing subprocesses" on 04/06/08, Ito Kazumitsu <[EMAIL PROTECTED]> writes:
> No! This may close a stream while the caller application is > still using it. Here is another patch which seems to work. --- libraries/javalib/kaffe/lang/UNIXProcess.java.orig Tue Apr 13 00:18:30 2004 +++ libraries/javalib/kaffe/lang/UNIXProcess.java Tue Jun 8 11:23:54 2004 @@ -34,6 +34,7 @@ OutputStream stdin_stream; InputStream raw_stdout; InputStream raw_stderr; + FileOutputStream sync; Throwable throwable; // saved to rethrow in correct thread public UNIXProcess(final String argv[], final String arge[], File dir) @@ -75,6 +76,7 @@ this.notifyAll(); } synchronized(UNIXProcess.this) { + try_close(sync); UNIXProcess.this.notifyAll(); } } @@ -116,7 +118,7 @@ raw_stderr = new FileInputStream(stderr_fd); // now signal child to proceed - FileOutputStream sync = new FileOutputStream(sync_fd); + sync = new FileOutputStream(sync_fd); byte[] sbuf = new byte[1]; try { sync.write(sbuf); @@ -164,6 +166,7 @@ raw_stdout.close(); raw_stderr.close(); stdin_stream.close(); + sync.close(); } catch (IOException e) { e.printStackTrace(); @@ -185,5 +188,30 @@ private native static void sendSignal0(int pid, int signum); private native static int getKillSignal(); +protected void finalize() throws Throwable { + super.finalize(); + try_close(raw_stdout); + try_close(raw_stderr); + try_close(stdin_stream); +} + +private static void try_close(InputStream stream) { + if (stream != null) { + try { + stream.close(); + } + catch (IOException e) {} + } +} + +private static void try_close(OutputStream stream) { + if (stream != null) { + try { + stream.close(); + } + catch (IOException e) {} + } +} + } _______________________________________________ kaffe mailing list [EMAIL PROTECTED] http://kaffe.org/cgi-bin/mailman/listinfo/kaffe