From: wessels <> Date: Sat, 9 May 1998 22:49:00 +0000 (+0000) Subject: end-of-object fixes. need to unregister, etc. X-Git-Tag: SQUID_3_0_PRE1~3350 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0860ee40b31f4e8b3b889f971120a3b231ed2f0c;p=thirdparty%2Fsquid.git end-of-object fixes. need to unregister, etc. --- diff --git a/src/asn.cc b/src/asn.cc index 11831ec09b..187601f027 100644 --- a/src/asn.cc +++ b/src/asn.cc @@ -1,5 +1,5 @@ /* - * $Id: asn.cc,v 1.34 1998/05/09 04:49:08 wessels Exp $ + * $Id: asn.cc,v 1.35 1998/05/09 16:49:00 wessels Exp $ * * DEBUG: section 53 AS Number handling * AUTHOR: Duane Wessels, Kostas Anagnostakis @@ -91,6 +91,7 @@ static PF whoisReadReply; static STCB asHandleReply; static int destroyRadixNode(struct radix_node *rn, void *w); static void asnAclInitialize(acl * acls); +static void asStateFree(void *data); static void destroyRadixNodeInfo(as_info *); @@ -209,7 +210,6 @@ asnCacheStart(int as) static void asHandleReply(void *data, char *buf, ssize_t size) { - ASState *asState = data; StoreEntry *e = asState->entry; char *s; @@ -217,14 +217,17 @@ asHandleReply(void *data, char *buf, ssize_t size) debug(53, 3) ("asHandleReply: Called with size=%d\n", size); if (e->store_status == STORE_ABORTED) { memFree(MEM_4K_BUF, buf); + asStateFree(asState); return; } if (size == 0 && e->mem_obj->inmem_hi > 0) { memFree(MEM_4K_BUF, buf); + asStateFree(asState); return; } else if (size < 0) { debug(53, 1) ("asHandleReply: Called with size=%d\n", size); memFree(MEM_4K_BUF, buf); + asStateFree(asState); return; } s = buf; @@ -249,6 +252,16 @@ asHandleReply(void *data, char *buf, ssize_t size) debug(53, 3) ("asState->seen = %d, asState->offset = %d\n", asState->seen, asState->offset); if (e->store_status == STORE_PENDING) { + debug(53, 3) ("asHandleReply: store_status == STORE_PENDING: %s\n", storeUrl(e)); + storeClientCopy(e, + asState->seen, + asState->offset, + SM_PAGE_SIZE, + buf, + asHandleReply, + asState); + } else if (asState->seen < e->mem_obj->inmem_hi) { + debug(53, 3) ("asHandleReply: asState->seen < e->mem_obj->inmem_hi %s\n", storeUrl(e)); storeClientCopy(e, asState->seen, asState->offset, @@ -259,13 +272,21 @@ asHandleReply(void *data, char *buf, ssize_t size) } else { debug(53, 3) ("asHandleReply: Done: %s\n", storeUrl(e)); memFree(MEM_4K_BUF, buf); - storeUnregister(e, asState); - storeUnlockObject(e); - requestUnlink(asState->request); - cbdataFree(asState); + asStateFree(asState); } } +static void +asStateFree(void *data) +{ + ASState *asState = data; + debug(53, 3) ("asnStateFree: %s\n", storeUrl(asState->entry)); + storeUnregister(asState->entry, asState); + storeUnlockObject(asState->entry); + requestUnlink(asState->request); + cbdataFree(asState); +} + /* add a network (addr, mask) to the radix tree, with matching AS * number */