From: wessels <> Date: Tue, 15 Jul 1997 21:46:27 +0000 (+0000) Subject: Seems that some KEY_PRIVATE entries were being swapped out. This X-Git-Tag: SQUID_3_0_PRE1~4885 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=89e079ed75377e812303a4122aaded4198d665e5;p=thirdparty%2Fsquid.git Seems that some KEY_PRIVATE entries were being swapped out. This caused problems during reload because we now also reload the flags. An entry would be loaded with e->key == e->url, but KEY_PRIVATE set. Now we clear KEY_PRIVATE in storeAddDiskRestore(), ignore entries with KEY_PRIVATE in storeDoRebuildFromDisk(), and don't swap out KEY_PRIVATE entries from storeCheckSwapable(). --- diff --git a/src/store.cc b/src/store.cc index 5821235261..0df16f8ead 100644 --- a/src/store.cc +++ b/src/store.cc @@ -1,6 +1,6 @@ /* - * $Id: store.cc,v 1.271 1997/07/15 04:03:11 wessels Exp $ + * $Id: store.cc,v 1.272 1997/07/15 15:46:27 wessels Exp $ * * DEBUG: section 20 Storeage Manager * AUTHOR: Harvest Derived @@ -685,13 +685,11 @@ storeSetPublicKey(StoreEntry * e) hash_link *table_entry = NULL; const char *newkey = NULL; int loop_detect = 0; - if (e->key && !BIT_TEST(e->flag, KEY_PRIVATE)) return; /* is already public */ - newkey = storeGeneratePublicKey(e->url, e->method); while ((table_entry = hash_lookup(store_table, newkey))) { - debug(20, 1) ("storeSetPublicKey: Making old '%s' private.\n", newkey); + debug(20, 3) ("storeSetPublicKey: Making old '%s' private.\n", newkey); e2 = (StoreEntry *) table_entry; storeSetPrivateKey(e2); storeRelease(e2); @@ -780,8 +778,7 @@ storeAddDiskRestore(const char *url, int file_number, int size, time_t expires, e->url = xstrdup(url); e->method = METHOD_GET; storeSetPublicKey(e); - BIT_SET(e->flag, ENTRY_CACHABLE); - BIT_RESET(e->flag, RELEASE_REQUEST); + assert(e->key); e->store_status = STORE_OK; storeSetMemStatus(e, NOT_IN_MEMORY); e->swap_status = SWAP_OK; @@ -795,6 +792,9 @@ storeAddDiskRestore(const char *url, int file_number, int size, time_t expires, e->lastmod = lastmod; e->refcount = refcount; e->flag = flags; + BIT_SET(e->flag, ENTRY_CACHABLE); + BIT_RESET(e->flag, RELEASE_REQUEST); + BIT_RESET(e->flag, KEY_PRIVATE); e->ping_status = PING_NONE; if (clean) { BIT_SET(e->flag, ENTRY_VALIDATED); @@ -1619,6 +1619,8 @@ storeCheckSwapable(StoreEntry * e) return 0; /* avoid release call below */ } else if (e->mem_obj->e_current_len > Config.Store.maxObjectSize) { debug(20, 2) ("storeCheckSwapable: NO: too big\n"); + } else if (BIT_TEST(e->flag, KEY_PRIVATE)) { + debug(20, 1) ("storeCheckSwapable: NO: private key\n"); } else { return 1; }