[
https://issues.apache.org/jira/browse/CASSANDRA-2951?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13071813#comment-13071813
]
Sylvain Lebresne commented on CASSANDRA-2951:
---------------------------------------------
I think there is a race between eviction and remove (or two removes even), so
that the references can be < 0. So I think the '== 0' in reference() and
finalize() (but not unreference() obviously) should become '<= 0'.
With that corrected, looks good. +1.
> FreeableMemory can be accessed after it is invalid
> --------------------------------------------------
>
> Key: CASSANDRA-2951
> URL: https://issues.apache.org/jira/browse/CASSANDRA-2951
> Project: Cassandra
> Issue Type: Bug
> Components: Core
> Affects Versions: 0.8.0
> Reporter: Jonathan Ellis
> Assignee: Jonathan Ellis
> Priority: Minor
> Fix For: 0.8.3
>
> Attachments: 2951.txt
>
>
> SerializingCache.get looks like this:
> {code}
> public V get(Object key)
> {
> FreeableMemory mem = map.get(key);
> if (mem == null)
> return null;
> return deserialize(mem);
> }
> {code}
> If a cache object is evicted or replaced after the get happens, but before
> deserialize completes, we will trigger an assertion failure (if asserts are
> enabled) or segfault (if they are not).
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira