@@ -211,34 +211,38 @@ protected static int getWordSize() {
211
211
protected synchronized IntBuffer getOffsetsBuffer (int size ) {
212
212
final int byteSize = size * 4 ;
213
213
IntBuffer buf = localOffsetsBuffer .get ();
214
-
214
+ if (buf != null ) {
215
+ // always reallocate buffer to ensure correct limits
216
+ localOffsetsBuffer .remove ();
217
+ buf = localOffsetsBuffer .get ();
218
+ }
215
219
if (byteSize > localBufferSize )
216
220
throw new ScratchBufferOverrun ();
217
221
218
- if (buf == null ) {
219
- ByteBuffer bb = ByteBuffer .allocateDirect (localBufferSize );
222
+ ByteBuffer bb = ByteBuffer .allocateDirect (localBufferSize );
220
223
221
- //keep native order, set before cast to IntBuffer
222
- bb .order (ByteOrder .nativeOrder ());
224
+ //keep native order, set before cast to IntBuffer
225
+ bb .order (ByteOrder .nativeOrder ());
223
226
224
- buf = bb .asIntBuffer ();
225
- localOffsetsBuffer .set (buf );
226
- }
227
+ buf = bb .asIntBuffer ();
228
+ localOffsetsBuffer .set (buf );
227
229
228
230
return buf ;
229
231
}
230
232
231
233
232
234
protected synchronized ByteBuffer getDataBuffer (int size ) {
233
235
ByteBuffer buf = localDataBuffer .get ();
234
-
236
+ if (buf != null ) {
237
+ // always reallocate buffer to ensure correct limits
238
+ localDataBuffer .remove ();
239
+ buf = localDataBuffer .get ();
240
+ }
235
241
if (size > localBufferSize )
236
242
throw new ScratchBufferOverrun ();
237
243
238
- if (buf == null ) {
239
- buf = ByteBuffer .allocateDirect (size );
240
- localDataBuffer .set (buf );
241
- }
244
+ buf = ByteBuffer .allocateDirect (size );
245
+ localDataBuffer .set (buf );
242
246
243
247
return buf ;
244
248
}
0 commit comments