]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Bug 3579: assertion failed 'MemPools[type]' from dst_as ACL
authorAmos Jeffries <squid3@treenet.co.nz>
Sat, 18 Jun 2016 11:48:03 +0000 (23:48 +1200)
committerAmos Jeffries <squid3@treenet.co.nz>
Sat, 18 Jun 2016 11:48:03 +0000 (23:48 +1200)
src/PeerSelectState.h
src/enums.h
src/peer_select.cc

index 57404bad97aba066d2f563fa8ee579a4dc921d63..cc22e6dab355708c2513408229643870be437b26 100644 (file)
@@ -38,11 +38,17 @@ void peerSelectInit(void);
 class FwdServer
 {
 public:
+    MEMPROXY_CLASS(FwdServer);
+    FwdServer(CachePeer *p, hier_code c) : _peer(cbdataReference(p)), code(c), next(NULL) {}
+    ~FwdServer() {cbdataReferenceDone(_peer);}
+
     CachePeer *_peer;                /* NULL --> origin server */
     hier_code code;
     FwdServer *next;
 };
 
+MEMPROXY_CLASS_INLINE(FwdServer);
+
 class ps_state
 {
 
index 5caee2b5953d3bdfd3b0a94a2ce20b3ca0ab23f7..4d04805e6d361806d9047b372a0e979bd923ba21 100644 (file)
@@ -170,7 +170,6 @@ typedef enum {
     MEM_DONTFREE,
     // following pools are initialized late by their component if needed (or never)
     MEM_FQDNCACHE_ENTRY,
-    MEM_FWD_SERVER,
     MEM_IDNS_QUERY,
     MEM_IPCACHE_ENTRY,
     MEM_MAX
index 79c5a4f13f097a7a0e9b09df102f83d9a83f911c..251a679b229de3059d79b4cbf8d10b14cce6c127 100644 (file)
@@ -71,7 +71,7 @@ ps_state::~ps_state()
     while (servers) {
         FwdServer *next = servers->next;
         cbdataReferenceDone(servers->_peer);
-        memFree(servers, MEM_FWD_SERVER);
+        delete servers;
         servers = next;
     }
 
@@ -246,7 +246,7 @@ peerSelectDnsPaths(ps_state *psstate)
         // clear the used fs and continue
         psstate->servers = fs->next;
         cbdataReferenceDone(fs->_peer);
-        memFree(fs, MEM_FWD_SERVER);
+        delete fs;
         peerSelectDnsPaths(psstate);
         return;
     }
@@ -268,7 +268,7 @@ peerSelectDnsPaths(ps_state *psstate)
         while (fs) {
             psstate->servers = fs->next;
             cbdataReferenceDone(fs->_peer);
-            memFree(fs, MEM_FWD_SERVER);
+            delete fs;
             fs = psstate->servers;
         }
     }
@@ -377,7 +377,7 @@ peerSelectDnsResults(const ipcache_addrs *ia, const DnsLookupDetails &details, v
 
     psstate->servers = fs->next;
     cbdataReferenceDone(fs->_peer);
-    memFree(fs, MEM_FWD_SERVER);
+    delete fs;
 
     // see if more paths can be found
     peerSelectDnsPaths(psstate);
@@ -772,7 +772,6 @@ void
 peerSelectInit(void)
 {
     memset(&PeerStats, '\0', sizeof(PeerStats));
-    memDataInit(MEM_FWD_SERVER, "FwdServer", sizeof(FwdServer), 0);
 }
 
 static void
@@ -934,12 +933,10 @@ peerHandlePingReply(CachePeer * p, peer_t type, AnyP::ProtocolType proto, void *
 static void
 peerAddFwdServer(FwdServer ** FSVR, CachePeer * p, hier_code code)
 {
-    FwdServer *fs = (FwdServer *)memAllocate(MEM_FWD_SERVER);
     debugs(44, 5, "peerAddFwdServer: adding " <<
            (p ? p->host : "DIRECT")  << " " <<
            hier_code_str[code]  );
-    fs->_peer = cbdataReference(p);
-    fs->code = code;
+    FwdServer *fs = new FwdServer(p, code);
 
     while (*FSVR)
         FSVR = &(*FSVR)->next;