Index: activemq-core/src/main/java/org/apache/activemq/openwire/OpenWireFormat.java =================================================================== --- activemq-core/src/main/java/org/apache/activemq/openwire/OpenWireFormat.java (revision 472254) +++ activemq-core/src/main/java/org/apache/activemq/openwire/OpenWireFormat.java (working copy) @@ -148,25 +148,28 @@ BooleanStream bs = new BooleanStream(); size += dsm.tightMarshal1(this, c, bs); size += bs.marshalledSize(); - - bytesOut.restart(size); - if( !sizePrefixDisabled ) { - bytesOut.writeInt(size); + + synchronized (bytesOut) { + bytesOut.restart(size); + if( !sizePrefixDisabled ) { + bytesOut.writeInt(size); + } + bytesOut.writeByte(type); + bs.marshal(bytesOut); + dsm.tightMarshal2(this, c, bytesOut, bs); + sequence = bytesOut.toByteSequence(); } - bytesOut.writeByte(type); - bs.marshal(bytesOut); - dsm.tightMarshal2(this, c, bytesOut, bs); - sequence = bytesOut.toByteSequence(); - } else { - bytesOut.restart(); - if( !sizePrefixDisabled ) { - bytesOut.writeInt(0); // we don't know the final size yet but write this here for now. + synchronized (bytesOut) { + bytesOut.restart(); + if( !sizePrefixDisabled ) { + bytesOut.writeInt(0); // we don't know the final size yet but write this here for now. + } + bytesOut.writeByte(type); + dsm.looseMarshal(this, c, bytesOut); + sequence = bytesOut.toByteSequence(); } - bytesOut.writeByte(type); - dsm.looseMarshal(this, c, bytesOut); - sequence = bytesOut.toByteSequence(); - + if( !sizePrefixDisabled ) { size = sequence.getLength()-4; int pos = sequence.offset; @@ -177,10 +180,12 @@ } else { - bytesOut.restart(5); - bytesOut.writeInt(size); - bytesOut.writeByte(NULL_TYPE); - sequence = bytesOut.toByteSequence(); + synchronized (bytesOut) { + bytesOut.restart(5); + bytesOut.writeInt(size); + bytesOut.writeByte(NULL_TYPE); + sequence = bytesOut.toByteSequence(); + } } if( ma!=null ) { @@ -240,19 +245,23 @@ DataOutput looseOut = dataOut; if( !sizePrefixDisabled ) { - bytesOut.restart(); - looseOut = bytesOut; - } - - looseOut.writeByte(type); - dsm.looseMarshal(this, c, looseOut); - - if( !sizePrefixDisabled ) { - ByteSequence sequence = bytesOut.toByteSequence(); + ByteSequence sequence = null; + synchronized (bytesOut) { + bytesOut.restart(); + looseOut = bytesOut; + + looseOut.writeByte(type); + dsm.looseMarshal(this, c, looseOut); + + sequence = bytesOut.toByteSequence(); + } + dataOut.writeInt(sequence.getLength()); dataOut.write(sequence.getData(), sequence.getOffset(), sequence.getLength()); + } else { + looseOut.writeByte(type); + dsm.looseMarshal(this, c, looseOut); } - } } else {