activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Tim Bain <tb...@alumni.duke.edu>
Subject Re: Potential threading bug in MemoryMessageStore.
Date Fri, 19 Jun 2015 04:57:43 GMT
Did you look at this any further?  Looking at the code, it looks like the
call will be protected without explicit synchronization by the intrinsic
lock on the synchronizedMap (and I think that some other methods such as
delete() and addMessage() that just call a method on the synchronizedMap
could have their synchronized blocks removed), though I might be looking at
that wrong.

Tim

On Mon, Apr 6, 2015 at 1:58 PM, Kevin Burton <burton@spinn3r.com> wrote:

> Pretty sure getMessage() in MemoryMessageStore has a bug.
>
> All access to messageTable is synchronized.  this method is not.  This
> means that there’s a race where a message can go into the queue but the
> thread reading it may have a cache copy of the data structure meaning it
> would get a cache miss
>
> Also, it looks like “addMessage” is doubly synchronized.
>
>     public Message getMessage(MessageId identity) throws IOException {
>         return messageTable.get(identity);
>     }
>
> … I’m going to migrate to using a PriorityBlockingQueue for this and remove
> all the synchronization and will try to submit a patch. Also I think
> PriorityBlockingQueue will lower memory usage by 40%
>
>
> --
>
> Founder/CEO Spinn3r.com
> Location: *San Francisco, CA*
> blog: http://burtonator.wordpress.com
> … or check out my Google+ profile
> <https://plus.google.com/102718274791889610666/posts>
> <http://spinn3r.com>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message