From d6b724ccb8b6dcd342e5c794bb62211dacc229f3 Mon Sep 17 00:00:00 2001 From: Cliff Woolley Date: Wed, 10 Dec 2003 03:22:32 +0000 Subject: [PATCH] "Thanks for checking in the changes to mod_mem_cache. I think there is a piece missing to that fixe; the adjustment of the queue_clock value in cache_cache.c (cache_insert()): Sorry about not finding/pointing that out before asking you to check in mod_mem_cache changes: queue_clock is initialized to 0 when initializing the cache. Based on the current conditional test (cache_cache.c, line 164): ---------------------------------------- priority = c->get_pri(ejected); if (c->queue_clock < priority) c->queue_clock = priority; ---------------------------------------- and the fact that the new get_pri() function return a negative value, queue_clock will NEVER be adjusted with the ejected element priority. This is a patch that should fix that problem:" Submitted by: Jean-Jacques Clar Generally glanced at by: Cliff Woolley (+1 on concept) (better to get it in there than to wait around for a year before I get a chance to really test it) git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@102008 13f79535-47bb-0310-9956-ffa450edef68 --- modules/experimental/cache_cache.c | 2 +- modules/experimental/mod_mem_cache.c | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/experimental/cache_cache.c b/modules/experimental/cache_cache.c index 476980cc9a..3b45bec8bf 100644 --- a/modules/experimental/cache_cache.c +++ b/modules/experimental/cache_cache.c @@ -161,7 +161,7 @@ CACHE_DECLARE(void) cache_insert(cache_cache_t* c, void *entry) /* FIX: If ejected is NULL, we'll segfault here */ priority = c->get_pri(ejected); - if (c->queue_clock < priority) + if (c->queue_clock > priority) c->queue_clock = priority; cache_hash_set(c->ht, diff --git a/modules/experimental/mod_mem_cache.c b/modules/experimental/mod_mem_cache.c index d0a24ec0c3..8f93872252 100644 --- a/modules/experimental/mod_mem_cache.c +++ b/modules/experimental/mod_mem_cache.c @@ -240,7 +240,7 @@ static long memcache_lru_algorithm(long queue_clock, void *a) cache_object_t *obj = (cache_object_t *)a; mem_cache_object_t *mobj = obj->vobj; if (mobj->priority == 0) - mobj->priority = -((long)(queue_clock + mobj->total_refs)); + mobj->priority = queue_clock - mobj->total_refs; /* * a 'proper' LRU function would just be @@ -255,8 +255,8 @@ static long memcache_gdsf_algorithm(long queue_clock, void *a) mem_cache_object_t *mobj = obj->vobj; if (mobj->priority == 0) - mobj->priority = -(queue_clock + - (long)(mobj->total_refs*1000 / mobj->m_len)); + mobj->priority = queue_clock - + (long)(mobj->total_refs*1000 / mobj->m_len); return mobj->priority; } -- 2.40.0