]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
CBDATA: log memory leak situations when --enable-debug-cbdata
authorAmos Jeffries <squid3@treenet.co.nz>
Fri, 10 Oct 2014 16:06:38 +0000 (09:06 -0700)
committerAmos Jeffries <squid3@treenet.co.nz>
Fri, 10 Oct 2014 16:06:38 +0000 (09:06 -0700)
CBDATA objects are supposed to be explicitly locked and unlocked by all
users. The nominal 'owner' of the data is also supposed to mark it as
invalid when unlocking its reference.

If a CBDATA object reaches 0 locks and is still valid, it therefore
follows that either the locking or invalidate has not been properly
implemented.

Now that we are migrating to CbcPointer usage instead of explicit
lock/unlock macro calls we have started encountering these situations.
Any object reporting a 'leak' must be investigated;
 a) perhapse RefCount is better?
 b) using CbcPointer consistently and invalidating correctly.

src/cbdata.cc

index e8b1a4fee9853a2cd1bb499014f69209d3b400b2..e7148d233a854693180acf5e2897e8607b55e596 100644 (file)
@@ -434,9 +434,16 @@ cbdataInternalUnlock(const void *p)
 
     -- c->locks;
 
-    if (c->valid || c->locks)
+    if (c->locks)
         return;
 
+    if (c->valid) {
+#if USE_CBDATA_DEBUG
+        debugs(45, DBG_IMPORTANT, "CBDATA memory leak. cbdata=" << p << " " << file << ":" << line);
+#endif
+        return;
+    }
+
     --cbdataCount;
 
     debugs(45, 9, "Freeing " << p);