Chetan Mehrotra created DIRECTMEMORY-137:
--------------------------------------------

             Summary: 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


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)

Reply via email to