]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Make storeGetMemSpace() call 'purge' for some objects and 'release'
authorwessels <>
Fri, 6 Sep 1996 04:14:07 +0000 (04:14 +0000)
committerwessels <>
Fri, 6 Sep 1996 04:14:07 +0000 (04:14 +0000)
for others.

src/store.cc

index 63c665caf9c7e2523e5294a7f9edaef20545e343..259d0828e67f89367c482b8701ea90f2096c6a53 100644 (file)
@@ -1,6 +1,6 @@
 
 /*
- * $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
@@ -259,7 +259,7 @@ static MemObject *new_MemObject()
 {
     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;
@@ -297,7 +297,7 @@ static void destroy_MemObject(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);
 }
 
@@ -327,7 +327,7 @@ static void destroy_StoreEntry(e)
 static mem_ptr new_MemObjectData()
 {
     debug(20, 3, "new_MemObjectData: calling memInit()\n");
-    /* meta_data.hot_vm++; */
+    meta_data.mem_data_count++;
     return memInit();
 }
 
@@ -343,7 +343,7 @@ static void destroy_MemObjectData(mem)
     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;
 }
@@ -1836,6 +1836,7 @@ int storeGetMemSpace(size, check_vm_number)
     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;
@@ -1849,23 +1850,25 @@ int storeGetMemSpace(size, check_vm_number)
        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);
@@ -1881,40 +1884,42 @@ int storeGetMemSpace(size, check_vm_number)
 
     /* 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;
 }