/*
- * $Id: MemPool.cc,v 1.11 2008/01/07 15:47:08 hno Exp $
+ * $Id: MemPool.cc,v 1.12 2008/02/07 02:51:13 adrian Exp $
*
* DEBUG: section 63 Low Level Memory Pool Management
* AUTHOR: Alex Rousskov, Andres Kroonmaa, Robert Collins
* not really need to be cleared.. There was a condition based on
* the object size here, but such condition is not safe.
*/
- memset(obj, 0, obj_size);
+ if (doZeroOnPush)
+ memset(obj, 0, obj_size);
Free = (void **)obj;
*Free = freeCache;
freeCache = obj;
return pools_inuse;
}
-MemAllocator::MemAllocator(char const *aLabel) : label(aLabel)
+MemAllocator::MemAllocator(char const *aLabel) : doZeroOnPush(true), label(aLabel)
{
}
{
}
+void
+MemAllocator::zeroOnPush(bool doIt)
+{
+ doZeroOnPush = doIt;
+}
+
MemPoolMeter const &
MemImplementingAllocator::getMeter() const
{
/*
- * $Id: mem.cc,v 1.107 2008/01/22 17:13:36 rousskov Exp $
+ * $Id: mem.cc,v 1.108 2008/02/07 02:51:17 adrian Exp $
*
* DEBUG: section 13 High Level Memory Pool Management
* AUTHOR: Harvest Derived
* max_pages for now
*/
void
-memDataInit(mem_type type, const char *name, size_t size, int max_pages_notused)
+memDataInit(mem_type type, const char *name, size_t size, int max_pages_notused, bool zeroOnPush)
{
assert(name && size);
assert(MemPools[type] == NULL);
MemPools[type] = memPoolCreate(name, size);
+ MemPools[type]->zeroOnPush(zeroOnPush);
}
* that are never used or used only once; perhaps we should simply use
* malloc() for those? @?@
*/
- memDataInit(MEM_2K_BUF, "2K Buffer", 2048, 10);
- memDataInit(MEM_4K_BUF, "4K Buffer", 4096, 10);
- memDataInit(MEM_8K_BUF, "8K Buffer", 8192, 10);
- memDataInit(MEM_16K_BUF, "16K Buffer", 16384, 10);
- memDataInit(MEM_32K_BUF, "32K Buffer", 32768, 10);
- memDataInit(MEM_64K_BUF, "64K Buffer", 65536, 10);
+ memDataInit(MEM_2K_BUF, "2K Buffer", 2048, 10, false);
+ memDataInit(MEM_4K_BUF, "4K Buffer", 4096, 10, false);
+ memDataInit(MEM_8K_BUF, "8K Buffer", 8192, 10, false);
+ memDataInit(MEM_16K_BUF, "16K Buffer", 16384, 10, false);
+ memDataInit(MEM_32K_BUF, "32K Buffer", 32768, 10, false);
+ memDataInit(MEM_64K_BUF, "64K Buffer", 65536, 10, false);
memDataInit(MEM_ACL_DENY_INFO_LIST, "acl_deny_info_list",
sizeof(acl_deny_info_list), 0);
memDataInit(MEM_ACL_NAME_LIST, "acl_name_list", sizeof(acl_name_list), 0);
for (i = 0; i < mem_str_pool_count; i++) {
StrPools[i].pool = memPoolCreate(StrPoolsAttrs[i].name, StrPoolsAttrs[i].obj_size);
+ StrPools[i].pool->zeroOnPush(false);
if (StrPools[i].pool->objectSize() != StrPoolsAttrs[i].obj_size)
debugs(13, 1, "Notice: " << StrPoolsAttrs[i].name << " is " << StrPools[i].pool->objectSize() << " bytes instead of requested " << StrPoolsAttrs[i].obj_size << " bytes");
/*
- * $Id: protos.h,v 1.554 2008/01/24 19:20:43 serassio Exp $
+ * $Id: protos.h,v 1.555 2008/02/07 02:51:18 adrian Exp $
*
*
* SQUID Web Proxy Cache http://www.squid-cache.org/
SQUIDCEXTERN void memFreeBuf(size_t size, void *);
SQUIDCEXTERN FREE *memFreeBufFunc(size_t size);
SQUIDCEXTERN int memInUse(mem_type);
-SQUIDCEXTERN void memDataInit(mem_type, const char *, size_t, int);
+SQUIDCEXTERN void memDataInit(mem_type, const char *, size_t, int, bool zeroOnPush = true);
SQUIDCEXTERN void memCheckInit(void);