]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
CBDATA: log memory leak situations when --enable-debug-cbdata
authorAmos Jeffries <squid3@treenet.co.nz>
Thu, 16 Oct 2014 18:39:55 +0000 (11:39 -0700)
committerAmos Jeffries <squid3@treenet.co.nz>
Thu, 16 Oct 2014 18:39:55 +0000 (11:39 -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 7c656c7ee054b3869fb2762b0a21ef58b49d47fb..156ce3690b5d401a439c6ce72ce98e8097bec224 100644 (file)
@@ -465,9 +465,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, "cbdataUnlock: Freeing " << p);