/* ============ Cache_FreeLow Throw things out until the hunk can be expanded to the given point ============ */ void Cache_FreeLow (int new_low_hunk) { cache_system_t *c; while (1) { c = cache_head.next; if (c == &cache_head) return; // nothing in cache at all if ((byte *)c >= hunk_base + new_low_hunk) return; // there is space to grow the hunk Cache_Move ( c ); // reclaim the space } }
/* * ============ * Cache_FreeHigh * * Throw things out until the hunk can be expanded to the given point * ============ */ static void Cache_FreeHigh(int new_high_hunk) { cache_system_t *c, *prev; prev = NULL; while (1) { c = cache_head.prev; if (c == &cache_head) return; /* nothing in cache at all */ if ((byte *)c + c->size <= hunk_base + hunk_size - new_high_hunk) return; /* there is space to grow the hunk */ if (c == prev) Cache_Free(c->user); /* didn't move out of the way */ else { Cache_Move(c); /* try to move it */ prev = c; } } }
/* ============ Cache_FreeHigh Throw things out until the hunk can be expanded to the given point ============ */ void Cache_FreeHigh (int new_high_hunk) { cache_system_t *c, *prev; prev = NULL; while (1) { c = cache_head.prev; if (c == &cache_head) return; // nothing in cache at all if ( (byte *)c + c->size <= hunk_base + hunk_size - new_high_hunk) return; // there is space to grow the hunk if (c == prev) Cache_Free (c->user, true); // didn't move out of the way //johnfitz -- added second argument else { Cache_Move (c); // try to move it prev = c; } } }
/* ============ Cache_FreeHigh Throw things out until the hunk can be expanded to the given point ============ */ void Cache_FreeHigh(int new_high_hunk) { cache_system_t *c, *prev; prev = NULL; while (1) { c = cache_head.prev; if (c == &cache_head) { return; // nothing in cache at all } if ((byte *)c + c->size <= hunk_base + hunk_size - new_high_hunk) { return; // there is space to grow the hunk } if (c == prev) { Cache_Free(c->user); // didn't move out of the way } else { Cache_Move(c); // try to move it prev = c; } } }