From: oetiker Date: Sun, 12 Jul 2009 06:28:18 +0000 (+0000) Subject: Do not trust cache tree pointers after releasing the cache lock. X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=61c89771f4bf2c52e2eb486bc2d9057fa3f2767c;p=rrdtool-all.git Do not trust cache tree pointers after releasing the cache lock. It's possible that a "FORGET" was issued in the mean time. -- kevin git-svn-id: svn://svn.oetiker.ch/rrdtool/trunk@1871 a5681a0c-68f1-0310-ab6d-d61299d08faa --- diff --git a/program/src/rrd_daemon.c b/program/src/rrd_daemon.c index d8f140e7..17ec97ed 100644 --- a/program/src/rrd_daemon.c +++ b/program/src/rrd_daemon.c @@ -913,7 +913,14 @@ static void *queue_thread_main (void *args __attribute__((unused))) /* {{{ */ } journal_write("wrote", file); - pthread_cond_broadcast(&ci->flushed); + + /* Search again in the tree. It's possible someone issued a "FORGET" + * while we were writing the update values. */ + pthread_mutex_lock(&cache_lock); + ci = (cache_item_t *) g_tree_lookup(cache_tree, file); + if (ci) + pthread_cond_broadcast(&ci->flushed); + pthread_mutex_unlock(&cache_lock); rrd_free_ptrs((void ***) &values, &values_num); free(file);