[
https://issues.apache.org/jira/browse/DIRECTMEMORY-137?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Chetan Mehrotra updated DIRECTMEMORY-137:
-----------------------------------------
Attachment: DIRECTMEMORY-137.patch
Patch with testcase. The fix is done via synchronizing on the MemoryBuffer for
the read part
> 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)