the item lock is already held for that key when do_item_get is called,
which is why the nolock code is called there.

slab rebalance has that second short-circuiting of fetches to ensure very
hot items don't permanently jam a page move.

On Wed, 2 Jul 2014, Zhiwei Chan wrote:

> Hi all,   I have thought carefully about the the thread-safe memcached 
> recently, and found that if the re-balance is running, it may not
> thread-safety. The code "do_item_get->do_item_unlink_nolock" may corrupt the 
> hash table. Whenever it trying to modify the hash table, it should get
> cache_lock, but the function do_item_get have not got the cache_lock.
>    Please tell me if anything i neglected.
>
> /** wrapper around assoc_find which does the lazy expiration logic */
> item *do_item_get(const char *key, const size_t nkey, const uint32_t hv) {
>     //mutex_lock(&cache_lock);
>     item *it = assoc_find(key, nkey, hv);
>     if (it != NULL) {
>         refcount_incr(&it->refcount);
>         /* Optimization for slab reassignment. prevents popular items from
>          * jamming in busy wait. Can only do this here to satisfy lock order
>          * of item_lock, cache_lock, slabs_lock. */
>         if (slab_rebalance_signal &&
>             ((void *)it >= slab_rebal.slab_start && (void *)it < 
> slab_rebal.slab_end)) {
>             do_item_unlink_nolock(it, hv);   
> -------------------------------------------------------------------> no lock 
> before unlink.
>             do_item_remove(it);
>             it = NULL;
>         }
>     }
>
> --
>
> ---
> You received this message because you are subscribed to the Google Groups 
> "memcached" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to memcached+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>
>

-- 

--- 
You received this message because you are subscribed to the Google Groups 
"memcached" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to memcached+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to