Status of multithreaded code

Ben Hartshorne memcache at green.hartshorne.net
Sat May 26 01:01:45 UTC 2007


All,

I saw a --enable-threads option in the configure script, along with a
thredas.c that contained multithreaded code.

What is the status of this code?  

I was looking at the code for mt_item_get_nocheck to get an item
regardless of its deleted status.

    392 /*
    393  * Returns an item whether or not it's been marked as expired or deleted.
    394  */
    395 item *mt_item_get_nocheck(char *key, size_t nkey) {
    396     item *it;
    397
    398     pthread_mutex_lock(&cache_lock);
    399     it = assoc_find(key, nkey);
    400     it->refcount++;
    401     pthread_mutex_unlock(&cache_lock);
    402     return it;
    403 }

If assoc_find returns 0 (which it does if the item is a cache miss), it
looks to me as though the function will segfault when it tries to
derefernce it in line 400.

Thoughts?

The corresponding single-threaded function checks to make sure it is
valid before derefencing it:

    402 /* returns an item whether or not it's delete-locked or expired. */
    403 item *do_item_get_nocheck(const char *key, const size_t nkey) {
    404     item *it = assoc_find(key, nkey);
    405     if (it) {
    406         it->refcount++;
    407         DEBUG_REFCNT(it, '+');
    408     }
    409     return it;
    410 }

-ben

-- 
Ben Hartshorne
email: ben at hartshorne.net
http://ben.hartshorne.net
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
Url : http://lists.danga.com/pipermail/memcached/attachments/20070525/bf464880/attachment.pgp


More information about the memcached mailing list