[
https://issues.apache.org/jira/browse/OODT-145?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12996581#comment-12996581
]
Brian Foster commented on OODT-145:
-----------------------------------
nice . . . with the above recommendation and a few extra mods (private ->
protected) to StreamGobbler i was able to piece a UnitTest together . . .
however, new problem! . . . it appears that not only was our code sometime
prematurely killing the process's iostreams but also, depending on which
platform you are running the code, the Process implementation for some JVMs
will call it's destroy() method prematurely . . . so this UnitTest would become
platform dependent -- not cool of course . . . so let's forget the my original
patch and instead have the StreamGobbler send it's exception capturing to the
Java Logger as FINEST instead of to stdout so by default it is silenced.
> StreamGobbler stopGobblingAndDie() method doesn't wait until gobble is really
> dead
> ----------------------------------------------------------------------------------
>
> Key: OODT-145
> URL: https://issues.apache.org/jira/browse/OODT-145
> Project: OODT
> Issue Type: Bug
> Components: commons
> Affects Versions: 0.2
> Environment: none
> Reporter: Brian Foster
> Assignee: Brian Foster
> Priority: Minor
> Fix For: 0.3
>
> Attachments: StreamGobber.OODT-145.2011-02-17.patch.txt,
> StreamGobbler.OODT-145.2011-02-18.patch.txt
>
>
> This causes the streams in ExecUtils to close its output and input streams
> before the gobbler finishes it's flush causing the following errors:
> java.io.IOException: Stream closed
> at
> java.io.BufferedInputStream.getBufIfOpen(BufferedInputStream.java:145)
> at java.io.BufferedInputStream.read(BufferedInputStream.java:308)
> at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264)
> at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)
> at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)
> at java.io.InputStreamReader.read(InputStreamReader.java:167)
> at java.io.BufferedReader.fill(BufferedReader.java:136)
> at java.io.BufferedReader.readLine(BufferedReader.java:299)
> at java.io.BufferedReader.readLine(BufferedReader.java:362)
> at org.apache.oodt.commons.exec.StreamGobbler.run(StreamGobbler.java:67)
> java.io.IOException: Bad file descriptor
> at java.io.FileInputStream.readBytes(Native Method)
> at java.io.FileInputStream.read(FileInputStream.java:199)
> at
> java.lang.UNIXProcess$DeferredCloseInputStream.read(UNIXProcess.java:227)
> at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264)
> at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)
> at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)
> at java.io.InputStreamReader.read(InputStreamReader.java:167)
> at java.io.BufferedReader.fill(BufferedReader.java:136)
> at java.io.BufferedReader.readLine(BufferedReader.java:299)
> at java.io.BufferedReader.readLine(BufferedReader.java:362)
> at org.apache.oodt.commons.exec.StreamGobbler.run(StreamGobbler.java:67)
--
This message is automatically generated by JIRA.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira