[
https://issues.apache.org/jira/browse/OODT-145?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12996136#comment-12996136
]
Brian Foster commented on OODT-145:
-----------------------------------
- will do on the unit test
- the synchronize solves this basically because synch_run gives the
StreamGobbler's object monitor to the thread which is created when the start()
is called on StreamGobber, therefore when the ExecUtils (i.e. in a different
Thread) calls stopGobblingAndDie() which first sets the boolean to false which
cause the synch_run to start termination then stopGobblingAndDie() calls a
synchronized method with causes it to wait until synch_run finishes and gives
up the object's monitor
> 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
>
>
> 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