[ 
https://issues.apache.org/jira/browse/CASSANDRA-4111?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13244920#comment-13244920
 ] 

Jonathan Ellis commented on CASSANDRA-4111:
-------------------------------------------

good catch.  also need to handle old.reference() returning false tho.

                
> Serializing cache can cause Segfault in 1.1
> -------------------------------------------
>
>                 Key: CASSANDRA-4111
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-4111
>             Project: Cassandra
>          Issue Type: Bug
>          Components: Core
>    Affects Versions: 1.1.0
>            Reporter: Vijay
>            Assignee: Vijay
>             Fix For: 1.1.0
>
>         Attachments: 0001-CASSANDRA-4111.patch
>
>
> Rare but this can happen per sure, looks like this issue is after 
> CASSANDRA-3862 hence affectes only 1.1
>         FreeableMemory old = map.get(key);
>         if (old == null)
>             return false;
>         // see if the old value matches the one we want to replace
>         FreeableMemory mem = serialize(value);
>         if (mem == null)
>             return false; // out of memory.  never mind.
>         V oldValue = deserialize(old);
>         boolean success = oldValue.equals(oldToReplace) && map.replace(key, 
> old, mem);
>         if (success)
>             old.unreference();
>         else
>             mem.unreference();
>         return success;
> in the above code block we deserialize(old) without taking reference to the 
> old memory, this can case seg faults when the old is reclaimed (free is 
> called)
> Fix is to get the reference just for deserialization
>         V oldValue;
>         // reference old guy before de-serializing
>         old.reference();
>         try
>         {
>              oldValue = deserialize(old);
>         }
>         finally
>         {
>             old.unreference();
>         }

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to