--------------------- PatchSet 10042 Date: 2007/09/29 10:33:31 Author: adri Branch: store_copy Tag: (none) Log: Ref-ify the urn code. Members: src/urn.c:1.24->1.24.6.1 Index: squid/src/urn.c =================================================================== RCS file: /cvsroot/squid-sf//squid/src/urn.c,v retrieving revision 1.24 retrieving revision 1.24.6.1 diff -u -r1.24 -r1.24.6.1 --- squid/src/urn.c 26 Feb 2007 09:51:33 -0000 1.24 +++ squid/src/urn.c 29 Sep 2007 10:33:31 -0000 1.24.6.1 @@ -1,6 +1,6 @@ /* - * $Id: urn.c,v 1.24 2007/02/26 09:51:33 squidadm Exp $ + * $Id: urn.c,v 1.24.6.1 2007/09/29 10:33:31 adri Exp $ * * DEBUG: section 52 URN Parsing * AUTHOR: Kostas Anagnostakis @@ -55,7 +55,7 @@ } flags; } url_entry; -static STCB urnHandleReply; +static STNCB urnHandleReply; static url_entry *urnParseReply(const char *inbuf, method_t); static const char *const crlf = "\r\n"; static QS url_entry_sort; @@ -146,11 +146,10 @@ } urnState->urlres_e = urlres_e; urnState->urlres_r = requestLink(urlres_r); - storeClientCopy(urnState->sc, urlres_e, + storeClientRef(urnState->sc, urlres_e, 0, 0, - 4096, - memAllocate(MEM_4K_BUF), + STORE_CLIENT_BUF_SZ, urnHandleReply, urnState); } @@ -171,12 +170,13 @@ } static void -urnHandleReply(void *data, char *buf, ssize_t size) +urnHandleReply(void *data, mem_node_ref nr, ssize_t size) { UrnState *urnState = data; + const char *buf = NULL; StoreEntry *e = urnState->entry; StoreEntry *urlres_e = urnState->urlres_e; - char *s = NULL; + const char *s = NULL; size_t k; HttpReply *rep; url_entry *urls; @@ -189,22 +189,23 @@ debug(52, 3) ("urnHandleReply: Called with size=%d.\n", (int) size); if (EBIT_TEST(urlres_e->flags, ENTRY_ABORTED)) { - memFree(buf, MEM_4K_BUF); + stmemNodeUnref(&nr); return; } if (size == 0) { - memFree(buf, MEM_4K_BUF); + stmemNodeUnref(&nr); return; } else if (size < 0) { - memFree(buf, MEM_4K_BUF); + stmemNodeUnref(&nr); return; } - if (urlres_e->store_status == STORE_PENDING && size < SM_PAGE_SIZE) { - storeClientCopy(urnState->sc, urlres_e, + buf = nr.node->data + nr.offset; + if (urlres_e->store_status == STORE_PENDING && size < STORE_CLIENT_BUF_SZ) { + stmemNodeUnref(&nr); + storeClientRef(urnState->sc, urlres_e, size, 0, - SM_PAGE_SIZE, - buf, + STORE_CLIENT_BUF_SZ, urnHandleReply, urnState); return; @@ -214,6 +215,7 @@ if (0 == k) { debug(52, 1) ("urnHandleReply: didn't find end-of-headers for %s\n", storeUrl(e)); + stmemNodeUnref(&nr); return; } s = buf + k; @@ -226,6 +228,7 @@ err = errorCon(ERR_URN_RESOLVE, HTTP_NOT_FOUND, urnState->request); err->url = xstrdup(storeUrl(e)); errorAppendEntry(e, err); + stmemNodeUnref(&nr); return; } while (xisspace(*s)) @@ -239,6 +242,7 @@ err = errorCon(ERR_URN_RESOLVE, HTTP_NOT_FOUND, urnState->request); err->url = xstrdup(storeUrl(e)); errorAppendEntry(e, err); + stmemNodeUnref(&nr); return; } min_u = urnFindMinRtt(urls, urnState->request->method, NULL); @@ -281,7 +285,7 @@ httpBodySet(&rep->body, &mb); httpReplySwapOut(rep, e); storeComplete(e); - memFree(buf, MEM_4K_BUF); + stmemNodeUnref(&nr); for (i = 0; i < urlcnt; i++) { safe_free(urls[i].url); safe_free(urls[i].host);