Add fails after delete
Anatoly Vorobey
mellon@pobox.com
Fri, 16 Jul 2004 02:45:26 +0300
On Thu, Jul 15, 2004 at 12:48:21PM -0700, Brad Fitzpatrick wrote:
> Because exptime == 0, it's not unlinked from the LRU.
>
> Avva: I remember why we don't unlink it from the LRU in the time-delayed
> delete case (the old default), but when the provided delay value is 0, why
> don't we just immediately unlink it?
It does seem to be a bug. I think it's crept in after I added realtime()
to allow relative expiration times, and used it in a delete handler.
What happened before that was that the item was added to the delete
queue with expiration time == now() rather than 0.
We could fix it by changing the expiration time to now() if it's 0,
as a special case in the delete handler, and then also changing < to
<= in this clause:
if (old_it && old_it->exptime && old_it->exptime < now) {
item_unlink(old_it);
old_it = 0;
}
But actually, I can't see anything wrong with just unlinking it directly
in the delete handler and not processing it through the queue, when
exptime is 0. If anyone's printing this item out at the same time or
otherwise using it, its refcount will prevent it from being deleted
anyway.
(thanks, Michael!)
--
avva
"There's nothing simply good, nor ill alone" -- John Donne