--------------------- PatchSet 10342 Date: 2007/12/29 07:21:43 Author: adri Branch: s27_adri Tag: (none) Log: Begin reference buffer magic. Nothing useful to see here. Members: src/protos.h:1.146.2.4.4.32->1.146.2.4.4.33 src/stmem.c:1.10.2.4.4.5->1.10.2.4.4.6 src/store.c:1.49.4.3.4.9->1.49.4.3.4.10 src/structs.h:1.158.2.5.4.9->1.158.2.5.4.10 Index: squid/src/protos.h =================================================================== RCS file: /cvsroot/squid-sf//squid/src/protos.h,v retrieving revision 1.146.2.4.4.32 retrieving revision 1.146.2.4.4.33 diff -u -r1.146.2.4.4.32 -r1.146.2.4.4.33 --- squid/src/protos.h 27 Dec 2007 13:47:06 -0000 1.146.2.4.4.32 +++ squid/src/protos.h 29 Dec 2007 07:21:43 -0000 1.146.2.4.4.33 @@ -1,6 +1,6 @@ /* - * $Id: protos.h,v 1.146.2.4.4.32 2007/12/27 13:47:06 adri Exp $ + * $Id: protos.h,v 1.146.2.4.4.33 2007/12/29 07:21:43 adri Exp $ * * * SQUID Web Proxy Cache http://www.squid-cache.org/ @@ -871,6 +871,7 @@ extern squid_off_t stmemFreeDataUpto(mem_hdr *, squid_off_t); extern void stmemAppend(mem_hdr *, const char *, int); +extern void stmemAppendRef(mem_hdr *, buf_t *, int start, int len); extern ssize_t stmemCopy(const mem_hdr *, squid_off_t, char *, size_t); extern void stmemFree(mem_hdr *); extern void stmemFreeData(mem_hdr *); @@ -900,6 +901,7 @@ extern void storeInit(void); extern void storeAbort(StoreEntry *); extern void storeAppend(StoreEntry *, const char *, int); +extern void storeAppendRef(StoreEntry *, buf_t *, int start, int len); extern void storeLockObjectDebug(StoreEntry *, const char *file, const int line); extern void storeRelease(StoreEntry *); extern int storeUnlockObjectDebug(StoreEntry *, const char *file, const int line); Index: squid/src/stmem.c =================================================================== RCS file: /cvsroot/squid-sf//squid/src/stmem.c,v retrieving revision 1.10.2.4.4.5 retrieving revision 1.10.2.4.4.6 diff -u -r1.10.2.4.4.5 -r1.10.2.4.4.6 --- squid/src/stmem.c 28 Dec 2007 08:03:34 -0000 1.10.2.4.4.5 +++ squid/src/stmem.c 29 Dec 2007 07:21:43 -0000 1.10.2.4.4.6 @@ -1,6 +1,6 @@ /* - * $Id: stmem.c,v 1.10.2.4.4.5 2007/12/28 08:03:34 adri Exp $ + * $Id: stmem.c,v 1.10.2.4.4.6 2007/12/29 07:21:43 adri Exp $ * * DEBUG: section 19 Store Memory Primitives * AUTHOR: Harvest Derived @@ -88,7 +88,22 @@ return current_offset; } +void +stmemAppendRef(mem_hdr *mem, buf_t *buf, int offset, int len) +{ +} + /* Append incoming data. */ +/* + * XXX todo: + * + * Need to insert some "offset" and "length" stuff into mem_node, and make + * this code + the MEMREF macros to take them into account. These will + * eventually become a buffer region reference once this code is done. + * Then, once all the code is aware of this and happy about the whole + * arrangement, write an stmemAppendRef() to properly append referenced + * data. Then convert http.c to apend that. :) + */ void stmemAppend(mem_hdr * mem, const char *data, int len) { Index: squid/src/store.c =================================================================== RCS file: /cvsroot/squid-sf//squid/src/store.c,v retrieving revision 1.49.4.3.4.9 retrieving revision 1.49.4.3.4.10 diff -u -r1.49.4.3.4.9 -r1.49.4.3.4.10 --- squid/src/store.c 28 Dec 2007 04:05:41 -0000 1.49.4.3.4.9 +++ squid/src/store.c 29 Dec 2007 07:21:43 -0000 1.49.4.3.4.10 @@ -1,6 +1,6 @@ /* - * $Id: store.c,v 1.49.4.3.4.9 2007/12/28 04:05:41 adri Exp $ + * $Id: store.c,v 1.49.4.3.4.10 2007/12/29 07:21:43 adri Exp $ * * DEBUG: section 20 Storage Manager * AUTHOR: Harvest Derived @@ -1166,6 +1166,28 @@ e->expires = squid_curtime; } +void +storeAppendRef(StoreEntry *e, buf_t *buf, int start, int len) +{ + MemObject *mem = e->mem_obj; + assert(mem != NULL); + assert(len >= 0); + assert(e->store_status == STORE_PENDING); + mem->refresh_timestamp = squid_curtime; + if (len) { + debug(20, 5) ("storeAppendRef: appending %d bytes for '%s'\n", + len, + storeKeyText(e->hash.key)); + storeGetMemSpace(len); + stmemAppendRef(&mem->data_hdr, buf, start, len); + mem->inmem_hi += len; + } + if (EBIT_TEST(e->flags, DELAY_SENDING)) + return; + InvokeHandlers(e); + storeSwapOut(e); +} + /* Append incoming data from a primary server to an entry. */ void storeAppend(StoreEntry * e, const char *buf, int len) Index: squid/src/structs.h =================================================================== RCS file: /cvsroot/squid-sf//squid/src/structs.h,v retrieving revision 1.158.2.5.4.9 retrieving revision 1.158.2.5.4.10 diff -u -r1.158.2.5.4.9 -r1.158.2.5.4.10 --- squid/src/structs.h 28 Dec 2007 08:03:34 -0000 1.158.2.5.4.9 +++ squid/src/structs.h 29 Dec 2007 07:21:43 -0000 1.158.2.5.4.10 @@ -1,6 +1,6 @@ /* - * $Id: structs.h,v 1.158.2.5.4.9 2007/12/28 08:03:34 adri Exp $ + * $Id: structs.h,v 1.158.2.5.4.10 2007/12/29 07:21:43 adri Exp $ * * * SQUID Web Proxy Cache http://www.squid-cache.org/ @@ -1629,6 +1629,8 @@ struct _mem_node { /* This is a bit pointless considering that buffers already have their own reference counting; worry about that later */ buf_t *buf; + int offset; + int length; int uses; mem_node *next; };