--------------------- PatchSet 10324 Date: 2007/12/27 13:47:06 Author: adri Branch: s27_adri Tag: (none) Log: remove stmemNodeGet(); that was a horrible abuse of FREE *. Assert() in the swap out path where we were storeWrite()'ing a stmemnode via that abuse. Members: src/protos.h:1.146.2.4.4.31->1.146.2.4.4.32 src/stmem.c:1.10.2.4.4.3->1.10.2.4.4.4 src/store_swapout.c:1.22.24.1->1.22.24.2 Index: squid/src/protos.h =================================================================== RCS file: /cvsroot/squid-sf//squid/src/protos.h,v retrieving revision 1.146.2.4.4.31 retrieving revision 1.146.2.4.4.32 diff -u -r1.146.2.4.4.31 -r1.146.2.4.4.32 --- squid/src/protos.h 26 Dec 2007 16:02:50 -0000 1.146.2.4.4.31 +++ squid/src/protos.h 27 Dec 2007 13:47:06 -0000 1.146.2.4.4.32 @@ -1,6 +1,6 @@ /* - * $Id: protos.h,v 1.146.2.4.4.31 2007/12/26 16:02:50 adri Exp $ + * $Id: protos.h,v 1.146.2.4.4.32 2007/12/27 13:47:06 adri Exp $ * * * SQUID Web Proxy Cache http://www.squid-cache.org/ @@ -874,8 +874,7 @@ extern ssize_t stmemCopy(const mem_hdr *, squid_off_t, char *, size_t); extern void stmemFree(mem_hdr *); extern void stmemFreeData(mem_hdr *); -extern void stmemNodeFree(void *); -extern char *stmemNodeGet(mem_node *); +extern void stmemNodeFree(mem_node *); extern int stmemRef(const mem_hdr * mem, squid_off_t offset, mem_node_ref * r); extern void stmemNodeUnref(mem_node_ref * r); extern mem_node_ref stmemNodeRef(mem_node_ref * r); Index: squid/src/stmem.c =================================================================== RCS file: /cvsroot/squid-sf//squid/src/stmem.c,v retrieving revision 1.10.2.4.4.3 retrieving revision 1.10.2.4.4.4 diff -u -r1.10.2.4.4.3 -r1.10.2.4.4.4 --- squid/src/stmem.c 27 Dec 2007 13:39:08 -0000 1.10.2.4.4.3 +++ squid/src/stmem.c 27 Dec 2007 13:47:07 -0000 1.10.2.4.4.4 @@ -1,6 +1,6 @@ /* - * $Id: stmem.c,v 1.10.2.4.4.3 2007/12/27 13:39:08 adri Exp $ + * $Id: stmem.c,v 1.10.2.4.4.4 2007/12/27 13:47:07 adri Exp $ * * DEBUG: section 19 Store Memory Primitives * AUTHOR: Harvest Derived @@ -36,9 +36,8 @@ #include "squid.h" void -stmemNodeFree(void *buf) +stmemNodeFree(mem_node *p) { - mem_node *p = (mem_node *) buf; if (!p->uses) { memFree(p->data, MEM_4K_BUF); memFree(p, MEM_MEM_NODE); @@ -47,13 +46,6 @@ p->uses--; } -char * -stmemNodeGet(mem_node * p) -{ - p->uses++; - return p->data; -} - void stmemFree(mem_hdr * mem) { Index: squid/src/store_swapout.c =================================================================== RCS file: /cvsroot/squid-sf//squid/src/store_swapout.c,v retrieving revision 1.22.24.1 retrieving revision 1.22.24.2 diff -u -r1.22.24.1 -r1.22.24.2 --- squid/src/store_swapout.c 27 Dec 2007 13:39:08 -0000 1.22.24.1 +++ squid/src/store_swapout.c 27 Dec 2007 13:47:07 -0000 1.22.24.2 @@ -1,6 +1,6 @@ /* - * $Id: store_swapout.c,v 1.22.24.1 2007/12/27 13:39:08 adri Exp $ + * $Id: store_swapout.c,v 1.22.24.2 2007/12/27 13:47:07 adri Exp $ * * DEBUG: section 20 Storage Manager Swapout Functions * AUTHOR: Duane Wessels @@ -287,7 +287,9 @@ /* XXX for now, this is disabled. the whole FREE * overloading to unref the stmem node is just plain * XXX stupid and must be fleshed out to be a proper completion callback. [ahc] */ assert(1==0); +#if 0 storeWrite(mem->swapout.sio, stmemNodeGet(mem->swapout.memnode), swap_buf_len, stmemNodeFree); +#endif /* the storeWrite() call might generate an error */ if (e->swap_status != SWAPOUT_WRITING) break;