- From: Jens Meggers <jens@meggers.com>
- Date: Tue, 8 Aug 2000 11:26:09 +0200
- To: <www-lib@w3.org>
- Message-ID: <004701c0011a$afb3af60$1002a8c0@pille>
Hi lib-WWW users, I found a problem in HTCacheGarbage() of HTCache.c. The procedure walks through the cache entires. When an entry is expired, it deletes the object with HTCache_remove(pres) and sets the cur pointer to the former valid pointer by calling cur = old_cur; However, if HTCache_remove(pres) does not succeed, we are going into an endless loop. In my implementation this happens because a cache entry was locked. I assume that locked entires cannot be deleted, so I changed the code to the following: if (pres->freshness_lifetime < current_age) { if (HTCache_remove(pres)) {; cur = old_cur; } else { old_cur = cur; } } else { old_cur = cur; } in the first for-loop. In the second for-loop, where the entires are cleared according to their hit rates, I also changed the code: if (pres->size > HTCacheMaxEntrySize || pres->hits <= hits) { if (HTCache_remove(pres)) {; cur = old_cur; removed = YES; } else { old_cur = cur; } } else { old_cur = cur; } The only thing I added is the if statement around HTChache_remove() that is missing in the original version. What do you think? Best regards, Jens
Received on Tuesday, 8 August 2000 05:27:10 UTC