/*
- * $Id: store.cc,v 1.99 1996/09/05 19:03:48 wessels Exp $
+ * $Id: store.cc,v 1.100 1996/09/05 22:14:07 wessels Exp $
*
* DEBUG: section 20 Storeage Manager
* AUTHOR: Harvest Derived
{
MemObject *mem = get_free_mem_obj();
mem->reply = xcalloc(1, sizeof(struct _http_reply));
- meta_data.store_in_mem_objects++;
+ meta_data.mem_obj_count++;
meta_data.misc += sizeof(struct _http_reply);
debug(20, 3, "new_MemObject: returning %p\n", mem);
return mem;
mem->request = NULL;
memset(mem, '\0', sizeof(MemObject));
put_free_mem_obj(mem);
- meta_data.store_in_mem_objects--;
+ meta_data.mem_obj_count--;
meta_data.misc -= sizeof(struct _http_reply);
}
static mem_ptr new_MemObjectData()
{
debug(20, 3, "new_MemObjectData: calling memInit()\n");
- /* meta_data.hot_vm++; */
+ meta_data.mem_data_count++;
return memInit();
}
if (mem->data) {
mem->data->mem_free(mem->data);
mem->data = NULL;
- /* meta_data.hot_vm--; */
+ meta_data.mem_data_count--;
}
mem->e_current_len = 0;
}
int list_count = 0;
int n_expired = 0;
int n_purged = 0;
+ int n_released = 0;
int n_locked = 0;
int i;
static time_t last_warning = 0;
return 0;
debug(20, 2, "storeGetMemSpace: Starting...\n");
- list = xcalloc(meta_data.store_in_mem_objects, sizeof(ipcache_entry *));
+ list = xcalloc(meta_data.mem_obj_count, sizeof(ipcache_entry *));
for (e = storeGetInMemFirst(); e; e = storeGetInMemNext()) {
- if (list_count == meta_data.store_in_mem_objects)
+ if (list_count == meta_data.mem_obj_count)
break;
- if (!storeCheckPurgeMem(e)) {
- n_locked++;
- continue;
- }
if (storeCheckExpired(e)) {
debug(20, 2, "storeGetMemSpace: Expired: %s\n", e->url);
n_expired++;
storeRelease(e);
+ } else if (storeCheckPurgeMem(e)) {
+ *(list + list_count) = e;
+ list_count++;
+ } else if (!storeEntryLocked(e)) {
+ *(list + list_count) = e;
+ list_count++;
+ } else {
+ n_locked++;
continue;
}
debug(20, 3, "storeGetMemSpace: Adding '%s'\n", e->url);
- *(list + list_count) = e;
- list_count++;
}
#ifdef EXTRA_DEBUGGING
debug(20, 5, "storeGetMemSpace: Current size: %7d bytes\n", store_mem_size);
/* Kick LRU out until we have enough memory space */
for (i = 0; i < list_count; i++) {
- if (meta_data.hot_vm > store_hotobj_low) {
- storePurgeMem(*(list + i));
- n_purged++;
- } else if ((store_mem_size + size) > store_mem_low) {
- storePurgeMem(*(list + i));
- n_purged++;
- } else
- break;
+ if (meta_data.hot_vm < store_hotobj_low)
+ if (store_mem_size + size < store_mem_low)
+ break;
+ e = *(list + i);
+ if (storeCheckPurgeMem(e)) {
+ storePurgeMem(e);
+ n_purged++;
+ } else if (!storeEntryLocked(e)) {
+ storeRelease(e);
+ n_released++;
+ } else {
+ fatal_dump("storeGetMemSpace: Bad Entry in LRU list");
+ }
}
- debug(20, 2, "storeGetMemSpace: After freeing size: %7d bytes\n", store_mem_size);
- debug(20, 2, "storeGetMemSpace: Purged: %7d items\n", n_purged);
+ i = 3;
if (meta_data.hot_vm > store_hotobj_high) {
if (squid_curtime - last_warning > 600) {
debug(20, 0, "WARNING: Over hot_vm object count (%d > %d)\n",
meta_data.hot_vm, store_hotobj_high);
- debug(20, 0, " : %d objects locked in memory\n", n_locked);
- debug(20, 0, " : purged %d of %d candidates\n",
- n_purged,
- list_count);
last_warning = squid_curtime;
+ i = 0;
}
- } else if ((store_mem_size + size) > store_mem_high) {
+ } else if (store_mem_size + size > store_mem_high) {
if (squid_curtime - last_warning > 600) {
debug(20, 0, "WARNING: Over store_mem high-water mark (%d > %d)\n",
store_mem_size + size, store_mem_high);
- debug(20, 0, " : %d objects locked in memory\n", n_locked);
- debug(20, 0, " : released %d of %d candidates\n",
- n_purged,
- list_count);
last_warning = squid_curtime;
+ i = 0;
}
}
- debug(20, 2, "storeGetMemSpace: Done.\n");
+ debug(20, i, "storeGetMemSpace stats:\n");
+ debug(20, i, " %6d objects locked in memory\n", n_locked);
+ debug(20, i, " %6d LRU candidates\n", list_count);
+ debug(20, i, " %6d were purged\n", n_purged);
+ debug(20, i, " %6d were released\n", n_released);
xfree(list);
return 0;
}