[
https://issues.apache.org/jira/browse/DIRECTMEMORY-137?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13871686#comment-13871686
]
Chetan Mehrotra commented on DIRECTMEMORY-137:
----------------------------------------------
Yes Buffers are not thread safe. Probably it would be better have a duplicate
method as present in ByteBuffer [1]
[1]
http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html#duplicate%28%29
> Concurrent access to MemoryBuffer leads to BufferUnderflowException
> -------------------------------------------------------------------
>
> Key: DIRECTMEMORY-137
> URL: https://issues.apache.org/jira/browse/DIRECTMEMORY-137
> Project: Apache DirectMemory
> Issue Type: Bug
> Components: core
> Affects Versions: 0.2
> Reporter: Chetan Mehrotra
> Attachments: DIRECTMEMORY-137.patch
>
>
> When same MemoryBuffer is accessed by multiple thread concurrently then it
> can lead to BufferUnderflowException.
> MemoryManagerService.retrieve method performs following steps
> 1. Get MemoryBuffer associated with the Pointer
> 2. Set its readerIndex to 0
> 3. Call readBytes. Which for {{NioMemoryBuffer}} invokes following code
> @Override
> public int readBytes( byte[] bytes, int offset, int length )
> {
> byteBuffer.get( bytes, offset, length );
> readerIndex += length;
> return length;
> }
> So if multiple thread invoke retrieve with same Pointer then readerIndex
> might be set to wrong value leading to BufferUnderflowException
> Refer to [1] for details
> [1] http://markmail.org/thread/yvevhzddta2fyal6
--
This message was sent by Atlassian JIRA
(v6.1.5#6160)