From: Cliff Woolley Date: Wed, 10 Dec 2003 03:22:32 +0000 (+0000) Subject: "Thanks for checking in the changes to mod_mem_cache. X-Git-Tag: pre_ajp_proxy~949 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d6b724ccb8b6dcd342e5c794bb62211dacc229f3;p=apache "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 --- 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; }