Do NOT close HeapDataOutputStream that is passed to Part
Project: http://git-wip-us.apache.org/repos/asf/geode/repo Commit: http://git-wip-us.apache.org/repos/asf/geode/commit/47c372f2 Tree: http://git-wip-us.apache.org/repos/asf/geode/tree/47c372f2 Diff: http://git-wip-us.apache.org/repos/asf/geode/diff/47c372f2 Branch: refs/heads/feature/GEODE-2632-17 Commit: 47c372f21999c442deeea4184ad135662e1d8ac4 Parents: 107d3c4 Author: Kirk Lund <kl...@apache.org> Authored: Tue May 23 14:46:34 2017 -0700 Committer: Kirk Lund <kl...@apache.org> Committed: Tue May 23 15:38:52 2017 -0700 ---------------------------------------------------------------------- .../internal/cache/tier/sockets/Message.java | 53 +++++++------------- 1 file changed, 18 insertions(+), 35 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/geode/blob/47c372f2/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/Message.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/Message.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/Message.java index 2ac6fea..1f9ef91 100644 --- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/Message.java +++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/Message.java @@ -14,8 +14,6 @@ */ package org.apache.geode.internal.cache.tier.sockets; -import static org.apache.geode.internal.util.IOUtils.close; - import org.apache.geode.SerializationException; import org.apache.geode.distributed.internal.DistributionConfig; import org.apache.geode.internal.Assert; @@ -111,26 +109,20 @@ public class Message { private static final byte[] FALSE = defineFalse(); private static byte[] defineTrue() { - HeapDataOutputStream hdos = new HeapDataOutputStream(10, null); - try { + try (HeapDataOutputStream hdos = new HeapDataOutputStream(10, null)) { BlobHelper.serializeTo(Boolean.TRUE, hdos); return hdos.toByteArray(); } catch (IOException e) { throw new IllegalStateException(e); - } finally { - close(hdos); } } private static byte[] defineFalse() { - HeapDataOutputStream hdos = new HeapDataOutputStream(10, null); - try { + try (HeapDataOutputStream hdos = new HeapDataOutputStream(10, null)) { BlobHelper.serializeTo(Boolean.FALSE, hdos); return hdos.toByteArray(); } catch (IOException e) { throw new IllegalStateException(e); - } finally { - close(hdos); } } @@ -288,23 +280,17 @@ public class Message { if (enableCaching) { byte[] bytes = CACHED_STRINGS.get(str); if (bytes == null) { - HeapDataOutputStream hdos = new HeapDataOutputStream(str); - try { + try (HeapDataOutputStream hdos = new HeapDataOutputStream(str)) { bytes = hdos.toByteArray(); CACHED_STRINGS.put(str, bytes); - } finally { - close(hdos); } } part.setPartState(bytes, false); + } else { - HeapDataOutputStream hdos = new HeapDataOutputStream(str); - try { - this.messageModified = true; - part.setPartState(hdos, false); - } finally { - close(hdos); - } + // do NOT close the HeapDataOutputStream + this.messageModified = true; + part.setPartState(new HeapDataOutputStream(str), false); } this.currentPart++; } @@ -380,20 +366,18 @@ public class Message { v = null; } - // create the HDOS with a flag telling it that it can keep any byte[] or ByteBuffers/ByteSources - // passed to it. + // Create the HDOS with a flag telling it that it can keep any byte[] or ByteBuffers/ByteSources + // passed to it. Do NOT close the HeapDataOutputStream! HeapDataOutputStream hdos = new HeapDataOutputStream(this.chunkSize, v, true); try { BlobHelper.serializeTo(o, hdos); - this.messageModified = true; - Part part = this.partsList[this.currentPart]; - part.setPartState(hdos, true); - this.currentPart++; } catch (IOException ex) { throw new SerializationException("failed serializing object", ex); - } finally { - close(hdos); } + this.messageModified = true; + Part part = this.partsList[this.currentPart]; + part.setPartState(hdos, true); + this.currentPart++; } private void serializeAndAddPart(Object o, boolean zipValues) { @@ -406,18 +390,17 @@ public class Message { v = null; } + // do NOT close the HeapDataOutputStream HeapDataOutputStream hdos = new HeapDataOutputStream(this.chunkSize, v); try { BlobHelper.serializeTo(o, hdos); - this.messageModified = true; - Part part = this.partsList[this.currentPart]; - part.setPartState(hdos, true); - this.currentPart++; } catch (IOException ex) { throw new SerializationException("failed serializing object", ex); - } finally { - close(hdos); } + this.messageModified = true; + Part part = this.partsList[this.currentPart]; + part.setPartState(hdos, true); + this.currentPart++; } public void addIntPart(int v) {