diff --git a/src/org/jacorb/orb/CDROutputStream.java b/src/org/jacorb/orb/CDROutputStream.java index 644c8c3..df1ceae 100644 --- a/src/org/jacorb/orb/CDROutputStream.java +++ b/src/org/jacorb/orb/CDROutputStream.java @@ -80,6 +80,7 @@ public class CDROutputStream private final IBufferManager bufMgr; protected byte[] buffer; + protected boolean own_buffer; private boolean closed; @@ -234,6 +235,7 @@ public class CDROutputStream { buffer = bufMgr.getBuffer(bufferSize); } + own_buffer = true; } /** * OutputStreams created using this constructor @@ -480,7 +482,10 @@ public class CDROutputStream return; } - bufMgr.returnBuffer( buffer, true ); + if (own_buffer) + { + bufMgr.returnBuffer( buffer, true ); + } buffer = null; closed = true; @@ -528,10 +533,14 @@ public class CDROutputStream System.arraycopy(buffer, 0, new_buf, 0, pos); } - // Change buffer size so return the old one. - bufMgr.returnBuffer (buffer, true); + if (own_buffer) + { + // Change buffer size so return the old one. + bufMgr.returnBuffer (buffer, true); + } buffer = new_buf; + own_buffer = true; } } @@ -701,9 +710,18 @@ public class CDROutputStream */ public void setBuffer(final byte[] b) { - bufMgr.returnBuffer( buffer, true ); + setBuffer (b, true); + } + + public void setBuffer(final byte[] b, boolean take) + { + if (own_buffer) + { + bufMgr.returnBuffer( buffer, true ); + } buffer = b; + own_buffer = take; deferredArrayQueue = null; pos = 0;