cassandra-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Vijay (Updated) (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (CASSANDRA-4111) Serializing cache can cause Segfault in 1.1
Date Mon, 02 Apr 2012 23:43:23 GMT

     [ https://issues.apache.org/jira/browse/CASSANDRA-4111?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Vijay updated CASSANDRA-4111:
-----------------------------

    Attachment: 0001-CASSANDRA-4111.patch
    
> 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

        

Mime
View raw message