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: [EMAIL PROTECTED]
http://ben.hartshorne.net
signature.asc
Description: Digital signature
