[ 
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

        

Reply via email to