Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Duplicate
-
0.10.1.1
-
None
Description
There is a scenario where by the delegated OutputStream does not call flush before close there will be missing data in the stream. The reason for this is the stream is actually marked close before it is actually flushed.
The end mark is written before the flush, also the writeEndMark was finishing the stream so its redundant in this context to mark it finished. In my fork the 'finished=true' was removed from the 'writeEndMark' method.
@Override public void close() throws IOException { if (!finished) { writeEndMark(); flush(); finished = true; } if (out != null) { out.close(); out = null; } }
should be
@Override public void close() throws IOException { if (!finished) { // finish any pending data writeBlock(); // write out the end mark writeEndMark(); // mark the stream as finished finished = true; } if (out != null) { out.close(); out = null; } }
Attachments
Issue Links
- links to