[squid-dev] [PATCH] StrList removal
Amos Jeffries
squid3 at treenet.co.nz
Thu Oct 27 14:04:13 UTC 2016
This patch completes the refactoring of StrList / link_list users to STL
containers. Removing the StrList.* files entirely.
It has had several hours of use with web traffic in a configuration
tuned to force disk caching of objects to excercise the replacement
code. No issues were seen in that limited test.
Amos
-------------- next part --------------
=== modified file 'src/Makefile.am'
--- src/Makefile.am 2016-10-19 21:14:13 +0000
+++ src/Makefile.am 2016-10-25 14:37:52 +0000
@@ -341,42 +341,40 @@
HttpMsg.cc \
HttpMsg.h \
HttpReply.cc \
HttpReply.h \
RequestFlags.h \
RequestFlags.cc \
HttpRequest.cc \
HttpRequest.h \
ICP.h \
icp_opcode.h \
icp_v2.cc \
icp_v3.cc \
int.h \
int.cc \
internal.h \
internal.cc \
$(IPC_SOURCE) \
ipcache.cc \
ipcache.h \
$(LEAKFINDERSOURCE) \
- SquidList.h \
- SquidList.cc \
LogTags.cc \
LogTags.h \
lookup_t.h \
main.cc \
MasterXaction.cc \
MasterXaction.h \
mem_node.cc \
mem_node.h \
MemBuf.cc \
MemObject.cc \
MemObject.h \
MessageSizes.h \
mime.h \
mime.cc \
mime_header.h \
mime_header.cc \
multicast.h \
multicast.cc \
neighbors.h \
neighbors.cc \
@@ -1042,42 +1040,40 @@
HttpHeader.h \
HttpHeader.cc \
HttpHeaderFieldInfo.h \
HttpHeaderTools.h \
HttpHeaderTools.cc \
HttpHdrContRange.cc \
HttpHdrRange.cc \
HttpHeaderFieldStat.h \
HttpHdrCc.h \
HttpHdrCc.cc \
HttpHdrCc.cci \
HttpHdrSc.cc \
HttpHdrScTarget.cc \
HttpMsg.cc \
int.h \
int.cc \
MasterXaction.cc \
MasterXaction.h \
Notes.cc \
Notes.h \
- SquidList.h \
- SquidList.cc \
mem_node.cc \
Parsing.cc \
tests/stub_libsecurity.cc \
SquidMath.cc \
StatCounters.cc \
StatCounters.h \
StatHist.h \
StrList.h \
StrList.cc \
tests/stub_StatHist.cc \
stmem.cc \
tests/stub_SBufDetailedStats.cc \
String.cc \
StoreIOState.cc \
tests/stub_StoreMeta.cc \
StoreMetaUnpacker.cc \
StoreSwapLogData.cc \
store_key_md5.h \
store_key_md5.cc \
swap_log_op.cc \
@@ -1279,42 +1275,40 @@
HttpHeaderFieldStat.h \
HttpHdrCc.h \
HttpHdrCc.cc \
HttpHdrCc.cci \
HttpHdrContRange.cc \
HttpHdrRange.cc \
HttpHdrSc.cc \
HttpHdrScTarget.cc \
HttpMsg.cc \
HttpReply.cc \
icp_v2.cc \
icp_v3.cc \
$(IPC_SOURCE) \
ipcache.cc \
int.h \
int.cc \
internal.h \
internal.cc \
LogTags.cc \
tests/stub_libsecurity.cc \
- SquidList.h \
- SquidList.cc \
MasterXaction.cc \
MasterXaction.h \
multicast.h \
multicast.cc \
mem_node.cc \
MemBuf.cc \
MemObject.cc \
mime.h \
mime.cc \
mime_header.h \
mime_header.cc \
neighbors.h \
neighbors.cc \
Notes.cc \
Notes.h \
Parsing.cc \
pconn.cc \
peer_digest.cc \
peer_proxy_negotiate_auth.h \
peer_proxy_negotiate_auth.cc \
@@ -1462,42 +1456,40 @@
filemap.cc \
HttpBody.h \
HttpBody.cc \
HttpHeaderFieldStat.h \
HttpHdrCc.h \
HttpHdrCc.cc \
HttpHdrCc.cci \
HttpHdrContRange.cc \
HttpHdrSc.cc \
HttpHdrScTarget.cc \
HttpHdrRange.cc \
HttpHeaderFieldInfo.h \
HttpHeaderTools.h \
HttpHeaderTools.cc \
HttpHeader.h \
HttpHeader.cc \
HttpMsg.cc \
HttpReply.cc \
int.h \
int.cc \
- SquidList.h \
- SquidList.cc \
MasterXaction.cc \
MasterXaction.h \
MemBuf.cc \
MemObject.cc \
mem_node.cc \
Notes.h \
Notes.cc \
Parsing.cc \
refresh.h \
refresh.cc \
RemovalPolicy.cc \
RequestFlags.h \
RequestFlags.cc \
tests/stub_libsecurity.cc \
StatCounters.h \
StatCounters.cc \
StatHist.h \
tests/stub_StatHist.cc \
stmem.cc \
tests/stub_SBufDetailedStats.cc \
@@ -1708,42 +1700,40 @@
HttpHdrRange.cc \
HttpHdrSc.cc \
HttpHdrScTarget.cc \
HttpMsg.cc \
HttpReply.cc \
PeerPoolMgr.h \
PeerPoolMgr.cc \
RequestFlags.h \
RequestFlags.cc \
HttpRequest.cc \
icp_v2.cc \
icp_v3.cc \
$(IPC_SOURCE) \
ipcache.cc \
int.h \
int.cc \
internal.h \
internal.cc \
LogTags.cc \
tests/stub_libsecurity.cc \
- SquidList.h \
- SquidList.cc \
MasterXaction.cc \
MasterXaction.h \
tests/stub_libmem.cc \
mem_node.cc \
MemBuf.cc \
MemObject.cc \
mime.h \
mime.cc \
mime_header.h \
mime_header.cc \
multicast.h \
multicast.cc \
neighbors.h \
neighbors.cc \
Notes.cc \
Notes.h \
Parsing.cc \
pconn.cc \
peer_digest.cc \
peer_proxy_negotiate_auth.h \
@@ -1946,42 +1936,40 @@
HttpHdrContRange.cc \
HttpHdrRange.cc \
HttpHdrSc.cc \
HttpHdrScTarget.cc \
HttpMsg.cc \
HttpReply.cc \
PeerPoolMgr.h \
PeerPoolMgr.cc \
RequestFlags.h \
RequestFlags.cc \
HttpRequest.cc \
icp_v2.cc \
icp_v3.cc \
$(IPC_SOURCE) \
ipcache.cc \
int.h \
int.cc \
internal.h \
internal.cc \
LogTags.cc \
- SquidList.h \
- SquidList.cc \
MasterXaction.cc \
MasterXaction.h \
MemBuf.cc \
MemObject.cc \
tests/stub_libmem.cc \
mem_node.cc \
mime.h \
mime.cc \
mime_header.h \
mime_header.cc \
multicast.h \
multicast.cc \
neighbors.h \
neighbors.cc \
Notes.cc \
Notes.h \
Parsing.cc \
pconn.cc \
peer_digest.cc \
peer_proxy_negotiate_auth.h \
@@ -2180,42 +2168,40 @@
HttpHeader.cc \
HttpHeaderFieldInfo.h \
HttpHeaderTools.h \
HttpHeaderTools.cc \
HttpMsg.cc \
HttpReply.cc \
PeerPoolMgr.h \
PeerPoolMgr.cc \
RequestFlags.h \
RequestFlags.cc \
HttpRequest.cc \
icp_v2.cc \
icp_v3.cc \
int.h \
int.cc \
internal.h \
internal.cc \
$(IPC_SOURCE) \
ipcache.cc \
LogTags.cc \
- SquidList.h \
- SquidList.cc \
MasterXaction.cc \
MasterXaction.h \
MemBuf.cc \
MemObject.cc \
tests/stub_libmem.cc \
mem_node.cc \
mime.h \
mime.cc \
mime_header.h \
mime_header.cc \
multicast.h \
multicast.cc \
neighbors.h \
neighbors.cc \
Notes.cc \
Notes.h \
Parsing.cc \
peer_digest.cc \
peer_proxy_negotiate_auth.h \
peer_proxy_negotiate_auth.cc \
@@ -2494,42 +2480,40 @@
HttpHeaderFieldStat.h \
HttpHdrCc.h \
HttpHdrCc.cc \
HttpHdrCc.cci \
HttpHdrContRange.cc \
HttpHdrRange.cc \
HttpHdrSc.cc \
HttpHdrScTarget.cc \
HttpMsg.cc \
HttpReply.cc \
icp_v2.cc \
icp_v3.cc \
$(IPC_SOURCE) \
ipcache.cc \
int.h \
int.cc \
internal.h \
internal.cc \
LogTags.cc \
tests/stub_libsecurity.cc \
- SquidList.h \
- SquidList.cc \
MasterXaction.cc \
MasterXaction.h \
multicast.h \
multicast.cc \
mem_node.cc \
MemBuf.cc \
MemObject.cc \
mime.h \
mime.cc \
mime_header.h \
mime_header.cc \
neighbors.h \
neighbors.cc \
Notes.cc \
Notes.h \
Parsing.cc \
pconn.cc \
peer_digest.cc \
peer_proxy_negotiate_auth.h \
peer_proxy_negotiate_auth.cc \
@@ -2724,42 +2708,40 @@
FileMap.h \
filemap.cc \
HttpHeaderFieldStat.h \
HttpHdrCc.h \
HttpHdrCc.cc \
HttpHdrCc.cci \
HttpHdrContRange.cc \
HttpHdrRange.cc \
HttpHdrSc.cc \
HttpHdrScTarget.cc \
HttpHeaderFieldInfo.h \
HttpHeaderTools.h \
HttpHeaderTools.cc \
HttpHeader.h \
HttpHeader.cc \
HttpMsg.cc \
RequestFlags.cc \
RequestFlags.h \
int.h \
int.cc \
- SquidList.h \
- SquidList.cc \
MasterXaction.cc \
MasterXaction.h \
mem_node.cc \
MemBuf.cc \
MemObject.cc \
Notes.h \
Notes.cc \
Parsing.cc \
RemovalPolicy.cc \
refresh.h \
refresh.cc \
StatCounters.h \
StatCounters.cc \
StatHist.h \
StatHist.cc \
stmem.cc \
repl_modules.h \
store.cc \
store_io.cc \
store_swapout.cc \
@@ -2950,42 +2932,40 @@
tests/stub_store_rebuild.cc \
tests/stub_store_stats.cc \
fatal.h \
tests/stub_fatal.cc \
fd.h \
fd.cc \
fde.h \
fde.cc \
client_db.h \
fs_io.h \
fs_io.cc \
FileMap.h \
filemap.cc \
HttpBody.h \
HttpBody.cc \
HttpReply.cc \
int.h \
int.cc \
RequestFlags.h \
RequestFlags.cc \
- SquidList.h \
- SquidList.cc \
Transients.cc \
MasterXaction.cc \
MasterXaction.h \
MemObject.cc \
Notes.h \
Notes.cc \
StoreSwapLogData.cc \
StoreIOState.cc \
StoreMetaUnpacker.cc \
$(STOREMETA_SOURCE) \
StoreFileSystem.cc \
store_io.cc \
store_swapout.cc \
store_swapmeta.cc \
$(UNLINKDSOURCE) \
$(WIN32_SOURCE) \
event.cc \
$(DELAY_POOL_SOURCE) \
CacheDigest.h \
tests/stub_CacheDigest.cc \
@@ -3135,42 +3115,40 @@
fde.cc \
FileMap.h \
filemap.cc \
HttpHeaderFieldStat.h \
HttpBody.h \
HttpBody.cc \
HttpHdrCc.cc \
HttpHdrContRange.cc \
HttpHdrRange.cc \
HttpHdrSc.cc \
HttpHdrScTarget.cc \
HttpHeader.h \
HttpHeader.cc \
HttpHeaderFieldInfo.h \
HttpHeaderTools.h \
HttpHeaderTools.cc \
HttpMsg.cc \
HttpReply.cc \
int.h \
int.cc \
- SquidList.h \
- SquidList.cc \
MasterXaction.cc \
MasterXaction.h \
MemBuf.cc \
MemObject.cc \
mem_node.cc \
Notes.h \
Notes.cc \
Parsing.cc \
RemovalPolicy.cc \
RequestFlags.cc \
RequestFlags.h \
StatCounters.h \
StatCounters.cc \
StatHist.h \
tests/stub_StatHist.cc \
stmem.cc \
repl_modules.h \
tests/stub_stat.cc \
store.cc \
StoreFileSystem.cc \
@@ -3350,42 +3328,40 @@
HttpHeaderFieldInfo.h \
HttpHeaderTools.h \
HttpHeaderTools.cc \
HttpMsg.cc \
HttpReply.cc \
PeerPoolMgr.h \
PeerPoolMgr.cc \
RequestFlags.h \
RequestFlags.cc \
HttpRequest.cc \
icp_v2.cc \
icp_v3.cc \
$(IPC_SOURCE) \
ipcache.cc \
int.h \
int.cc \
internal.h \
internal.cc \
tests/stub_libeui.cc \
LogTags.cc \
- SquidList.h \
- SquidList.cc \
MasterXaction.cc \
MasterXaction.h \
multicast.h \
multicast.cc \
mem_node.cc \
MemBuf.cc \
MemObject.cc \
mime.h \
mime.cc \
mime_header.h \
mime_header.cc \
neighbors.h \
neighbors.cc \
Notes.h \
Notes.cc \
Parsing.cc \
pconn.cc \
peer_digest.cc \
peer_proxy_negotiate_auth.h \
peer_proxy_negotiate_auth.cc \
=== removed file 'src/SquidList.cc'
--- src/SquidList.cc 2016-01-01 00:12:18 +0000
+++ src/SquidList.cc 1970-01-01 00:00:00 +0000
@@ -1,49 +0,0 @@
-/*
- * Copyright (C) 1996-2016 The Squid Software Foundation and contributors
- *
- * Squid software is distributed under GPLv2+ license and includes
- * contributions from numerous individuals and organizations.
- * Please see the COPYING and CONTRIBUTORS files for details.
- */
-
-/* DEBUG: none Linked list functions (deprecated) */
-
-#include "squid.h"
-#include "mem/forward.h"
-#include "SquidList.h"
-
-/* This should go away, in favour of the List template class */
-
-void
-linklistPush(link_list ** L, void *p)
-{
- link_list *l = (link_list *)memAllocate(MEM_LINK_LIST);
- l->next = NULL;
- l->ptr = p;
-
- while (*L)
- L = &(*L)->next;
-
- *L = l;
-}
-
-void *
-linklistShift(link_list ** L)
-{
- void *p;
- link_list *l;
-
- if (NULL == *L)
- return NULL;
-
- l = *L;
-
- p = l->ptr;
-
- *L = (*L)->next;
-
- memFree(l, MEM_LINK_LIST);
-
- return p;
-}
-
=== removed file 'src/SquidList.h'
--- src/SquidList.h 2016-01-01 00:12:18 +0000
+++ src/SquidList.h 1970-01-01 00:00:00 +0000
@@ -1,25 +0,0 @@
-/*
- * Copyright (C) 1996-2016 The Squid Software Foundation and contributors
- *
- * Squid software is distributed under GPLv2+ license and includes
- * contributions from numerous individuals and organizations.
- * Please see the COPYING and CONTRIBUTORS files for details.
- */
-
-/* DEBUG: none Linked list functions (deprecated) */
-
-#ifndef SQUID_SQUIDLIST_H_
-#define SQUID_SQUIDLIST_H_
-
-class link_list
-{
-public:
- void *ptr;
- link_list *next;
-};
-
-void linklistPush(link_list **, void *);
-void *linklistShift(link_list **);
-
-#endif /* SQUID_SQUIDLIST_H_ */
-
=== modified file 'src/mem/forward.h'
--- src/mem/forward.h 2016-10-24 12:46:35 +0000
+++ src/mem/forward.h 2016-10-25 14:22:52 +0000
@@ -27,41 +27,40 @@
void Stats(StoreEntry *);
void CleanIdlePools(void *unused);
void Report(std::ostream &);
void PoolReport(const MemPoolStats * mp_st, const MemPoolMeter * AllMeter, std::ostream &);
};
extern const size_t squidSystemPageSize;
/// \deprecated use MEMPROXY_CLASS instead.
typedef void FREE(void *);
/// Types of memory pool which do not yet use MEMPROXY_CLASS() API
typedef enum {
MEM_NONE,
MEM_2K_BUF,
MEM_4K_BUF,
MEM_8K_BUF,
MEM_16K_BUF,
MEM_32K_BUF,
MEM_64K_BUF,
- MEM_LINK_LIST,
MEM_DREAD_CTRL,
MEM_DWRITE_Q,
MEM_MD5_DIGEST,
MEM_MAX
} mem_type;
void memClean(void);
void memInitModule(void);
void memCleanModule(void);
void memConfigure(void);
void *memAllocate(mem_type);
void *memAllocString(size_t net_size, size_t * gross_size);
void *memAllocBuf(size_t net_size, size_t * gross_size);
void *memReallocBuf(void *buf, size_t net_size, size_t * gross_size);
void memFree(void *, int type);
void memFreeString(size_t size, void *);
void memFreeBuf(size_t size, void *);
FREE *memFreeBufFunc(size_t size);
int memInUse(mem_type);
void memDataInit(mem_type, const char *, size_t, int, bool doZero = true);
=== modified file 'src/mem/old_api.cc'
--- src/mem/old_api.cc 2016-10-24 12:46:35 +0000
+++ src/mem/old_api.cc 2016-10-25 15:15:31 +0000
@@ -5,41 +5,40 @@
* contributions from numerous individuals and organizations.
* Please see the COPYING and CONTRIBUTORS files for details.
*/
/* DEBUG: section 13 High Level Memory Pool Management */
#include "squid.h"
#include "base/PackableStream.h"
#include "ClientInfo.h"
#include "dlink.h"
#include "event.h"
#include "fs_io.h"
#include "icmp/net_db.h"
#include "md5.h"
#include "mem/forward.h"
#include "mem/Meter.h"
#include "mem/Pool.h"
#include "MemBuf.h"
#include "mgr/Registration.h"
#include "SquidConfig.h"
-#include "SquidList.h"
#include "SquidTime.h"
#include "Store.h"
#include <iomanip>
/* forward declarations */
static void memFree2K(void *);
static void memFree4K(void *);
static void memFree8K(void *);
static void memFree16K(void *);
static void memFree32K(void *);
static void memFree64K(void *);
/* local prototypes */
static void memStringStats(std::ostream &);
/* module locals */
static double xm_time = 0;
static double xm_deltat = 0;
@@ -423,41 +422,40 @@
* debug messages here at level 0 or 1 will always be printed
* on stderr.
*/
/**
* Then initialize all pools.
* \par
* Starting with generic 2kB - 64kB buffr pools, then specific object types.
* \par
* It does not hurt much to have a lot of pools since sizeof(MemPool) is
* small; someday we will figure out what to do with all the entries here
* that are never used or used only once; perhaps we should simply use
* malloc() for those? @?@
*/
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_LINK_LIST, "link_list", sizeof(link_list), 10);
memDataInit(MEM_DREAD_CTRL, "dread_ctrl", sizeof(dread_ctrl), 0);
memDataInit(MEM_DWRITE_Q, "dwrite_q", sizeof(dwrite_q), 0);
memDataInit(MEM_MD5_DIGEST, "MD5 digest", SQUID_MD5_DIGEST_LENGTH, 0);
GetPool(MEM_MD5_DIGEST)->setChunkSize(512 * 1024);
MemIsInitialized = true;
// finally register with the cache manager
Mgr::RegisterAction("mem", "Memory Utilization", Mem::Stats, 0, 1);
}
void
Mem::Report()
{
debugs(13, 3, "Memory pools are '" <<
(Config.onoff.mem_pools ? "on" : "off") << "'; limit: " <<
std::setprecision(3) << toMB(MemPools::GetInstance().idleLimit()) <<
" MB");
}
=== modified file 'src/repl/heap/store_repl_heap.cc'
--- src/repl/heap/store_repl_heap.cc 2016-01-01 00:12:18 +0000
+++ src/repl/heap/store_repl_heap.cc 2016-10-25 20:29:32 +0000
@@ -3,45 +3,46 @@
*
* Squid software is distributed under GPLv2+ license and includes
* contributions from numerous individuals and organizations.
* Please see the COPYING and CONTRIBUTORS files for details.
*/
/*
* DEBUG: section 81 Store HEAP Removal Policies
*
* Based on the ideas of the heap policy implemented by John Dilley of
* Hewlett Packard. Rewritten from scratch when modularizing the removal
* policy implementation of Squid.
*
* For details on the original heap policy work and the thinking behind see
* http://www.hpl.hp.com/techreports/1999/HPL-1999-69.html
*/
#include "squid.h"
#include "heap.h"
#include "MemObject.h"
-#include "SquidList.h"
#include "Store.h"
#include "store_heap_replacement.h"
#include "wordlist.h"
+#include <queue>
+
REMOVALPOLICYCREATE createRemovalPolicy_heap;
static int nr_heap_policies = 0;
struct HeapPolicyData {
void setPolicyNode (StoreEntry *, void *) const;
RemovalPolicy *policy;
heap *theHeap;
heap_key_func *keyfunc;
int count;
int nwalkers;
enum heap_entry_type {
TYPE_UNKNOWN = 0, TYPE_STORE_ENTRY, TYPE_STORE_MEM
} type;
};
/* Hack to avoid having to remember the RemovalPolicyNode location.
* Needed by the purge walker.
*/
static enum HeapPolicyData::heap_entry_type
@@ -164,118 +165,116 @@
static RemovalPolicyWalker *
heap_walkInit(RemovalPolicy * policy)
{
HeapPolicyData *h = (HeapPolicyData *)policy->_data;
RemovalPolicyWalker *walker;
HeapWalkData *heap_walk;
h->nwalkers += 1;
walker = new RemovalPolicyWalker;
heap_walk = (HeapWalkData *)xcalloc(1, sizeof(*heap_walk));
heap_walk->current = 0;
walker->_policy = policy;
walker->_data = heap_walk;
walker->Next = heap_walkNext;
walker->Done = heap_walkDone;
return walker;
}
/** RemovalPurgeWalker **/
-typedef struct _HeapPurgeData HeapPurgeData;
-
-struct _HeapPurgeData {
- link_list *locked_entries;
- heap_key min_age;
+class HeapPurgeData
+{
+public:
+ std::queue<StoreEntry *> locked_entries;
+ heap_key min_age = 0.0;
};
static StoreEntry *
heap_purgeNext(RemovalPurgeWalker * walker)
{
HeapPurgeData *heap_walker = (HeapPurgeData *)walker->_data;
RemovalPolicy *policy = walker->_policy;
HeapPolicyData *h = (HeapPolicyData *)policy->_data;
StoreEntry *entry;
heap_key age;
try_again:
if (heap_empty(h->theHeap))
return NULL; /* done */
age = heap_peepminkey(h->theHeap);
entry = (StoreEntry *)heap_extractmin(h->theHeap);
if (entry->locked()) {
entry->lock("heap_purgeNext");
- linklistPush(&heap_walker->locked_entries, entry);
+ heap_walker->locked_entries.push(entry);
goto try_again;
}
heap_walker->min_age = age;
h->setPolicyNode(entry, NULL);
return entry;
}
static void
heap_purgeDone(RemovalPurgeWalker * walker)
{
HeapPurgeData *heap_walker = (HeapPurgeData *)walker->_data;
RemovalPolicy *policy = walker->_policy;
HeapPolicyData *h = (HeapPolicyData *)policy->_data;
- StoreEntry *entry;
assert(strcmp(policy->_type, "heap") == 0);
assert(h->nwalkers > 0);
h->nwalkers -= 1;
if (heap_walker->min_age > 0) {
h->theHeap->age = heap_walker->min_age;
debugs(81, 3, "Heap age set to " << h->theHeap->age);
}
/*
* Reinsert the locked entries
*/
- while ((entry = (StoreEntry *)linklistShift(&heap_walker->locked_entries))) {
+ while (StoreEntry *entry = heap_walker->locked_entries.front()) {
+ heap_walker->locked_entries.pop();
heap_node *node = heap_insert(h->theHeap, entry);
h->setPolicyNode(entry, node);
entry->unlock("heap_purgeDone");
}
- safe_free(walker->_data);
+ delete heap_walker;
delete walker;
}
static RemovalPurgeWalker *
heap_purgeInit(RemovalPolicy * policy, int max_scan)
{
HeapPolicyData *h = (HeapPolicyData *)policy->_data;
RemovalPurgeWalker *walker;
HeapPurgeData *heap_walk;
h->nwalkers += 1;
walker = new RemovalPurgeWalker;
- heap_walk = (HeapPurgeData *)xcalloc(1, sizeof(*heap_walk));
- heap_walk->min_age = 0.0;
- heap_walk->locked_entries = NULL;
+ heap_walk = new HeapPurgeData;
walker->_policy = policy;
walker->_data = heap_walk;
walker->max_scan = max_scan;
walker->Next = heap_purgeNext;
walker->Done = heap_purgeDone;
return walker;
}
static void
heap_free(RemovalPolicy * policy)
{
HeapPolicyData *h = (HeapPolicyData *)policy->_data;
/* Make some verification of the policy state */
assert(strcmp(policy->_type, "heap") == 0);
assert(h->nwalkers);
assert(h->count);
/* Ok, time to destroy this policy */
safe_free(h);
memset(policy, 0, sizeof(*policy));
delete policy;
More information about the squid-dev
mailing list