remove_cache_item() did not check whether a file was in queue before
authoroetiker <oetiker@a5681a0c-68f1-0310-ab6d-d61299d08faa>
Wed, 22 Oct 2008 06:02:23 +0000 (06:02 +0000)
committeroetiker <oetiker@a5681a0c-68f1-0310-ab6d-d61299d08faa>
Wed, 22 Oct 2008 06:02:23 +0000 (06:02 +0000)
commit7da84b6fd796d774d5db4aefb6615d33fa2711b4
treec96fe2a1ad1c600a0c980f4f61d0da6d1e3fe6dc
parent43038701465adf630b312e6ca99d4c549fa7cc9f
remove_cache_item() did not check whether a file was in queue before
modifying the cache head/tail pointers.  Therefore, the process of
flushing old files may perturb the cache_queue_head pointer.  This caused
some nodes with CI_FLAGS_IN_QUEUE to be un-linked from the queue list.

Thereafter, they would not be flushed by any periodic process (although
they could be revived with FLUSH or UPDATE).  This caused a slow memory
leak for files that are no longer updated.  Pending updates for these
"abandoned" files would remain in memory ad infinitum.

With this patch, remove_from_queue() will check that the item is queued
before modifying the head/tail pointers.  This restores the intended
behavior.
--kevin

git-svn-id: svn://svn.oetiker.ch/rrdtool/trunk/program@1626 a5681a0c-68f1-0310-ab6d-d61299d08faa
src/rrd_daemon.c