]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Add missing StoreEntry::lock() parameters, require unlock() parameter,
authorAlex Rousskov <rousskov@measurement-factory.com>
Thu, 19 Dec 2013 04:53:35 +0000 (21:53 -0700)
committerAlex Rousskov <rousskov@measurement-factory.com>
Thu, 19 Dec 2013 04:53:35 +0000 (21:53 -0700)
and polish un/lock() context debugging.

src/Store.h
src/icmp/net_db.cc
src/mgr/StoreToCommWriter.cc
src/mime.cc
src/neighbors.cc
src/peer_digest.cc
src/repl/heap/store_repl_heap.cc
src/store.cc
src/store_digest.cc
src/tests/testRock.cc
src/tests/testUfs.cc

index c8fef091bb9f0a1fedde131501dc67bd2590525f..b5325782ce8f4c784c7644e11b4d7abfa4345a80 100644 (file)
@@ -202,11 +202,12 @@ public:
     virtual int64_t contentLen() const;
 
     /// claim shared ownership of this entry (for use in a given context)
+    /// matching lock() and unlock() contexts eases leak triage but is optional
     void lock(const char *context);
 
     /// disclaim shared ownership; may remove entry from store and delete it
     /// returns remaning lock level (zero for unlocked and possibly gone entry)
-    int unlock(const char *context = "somebody");
+    int unlock(const char *context);
 
     /// returns a local concurrent use counter, for debugging
     int locks() const { return static_cast<int>(lock_count); }
index c17d7754b514a4e4cb2662cff49f2f162b3db11c..cc1ccd8ffae896d062151dca04a0b7efd0c20ba3 100644 (file)
@@ -887,7 +887,7 @@ netdbExchangeDone(void *data)
     debugs(38, 3, "netdbExchangeDone: " << ex->e->url()  );
     HTTPMSGUNLOCK(ex->r);
     storeUnregister(ex->sc, ex->e, ex);
-    ex->e->unlock();
+    ex->e->unlock("netdbExchangeDone");
     cbdataReferenceDone(ex->p);
     cbdataFree(ex);
 }
index 43a31562045cbb21f61f987c1a79ee413dd988a1..00f9226c3c5d8176347043ff215ea2b17c04aacc 100644 (file)
@@ -138,7 +138,7 @@ Mgr::StoreToCommWriter::swanSong()
             sc = NULL;
         }
         entry->unregisterAbort();
-        entry->unlock();
+        entry->unlock("Mgr::StoreToCommWriter::swanSong");
         entry = NULL;
     }
     close();
index e0c2983f544f7d8655a6de91378a5c63ea7f7b8e..b49475612d2457657671bffed755a3c8a211c66b 100644 (file)
@@ -440,7 +440,7 @@ MimeIcon::created (StoreEntry *newEntry)
     e->flush();
     e->complete();
     e->timestampsSet();
-    e->unlock();
+    e->unlock("MimeIcon::created");
     memFree(buf, MEM_4K_BUF);
     debugs(25, 3, "Loaded icon " << url_);
 }
index a02af0726ee8fe185de4432b375c177ca2d9ac1b..eb2dd52ea6a9e155fcb69425b98d4158c77d840a 100644 (file)
@@ -1426,7 +1426,7 @@ peerCountMcastPeersDone(void *data)
 
     fake->abort(); // sets ENTRY_ABORTED and initiates releated cleanup
     HTTPMSGUNLOCK(fake->mem_obj->request);
-    fake->unlock();
+    fake->unlock("peerCountMcastPeersDone");
     HTTPMSGUNLOCK(psstate->request);
     cbdataFree(psstate);
 }
index d2efd14b230cefc0926efda408a51a002a128fca..60559dc4ce5291b1e467dfd15688d7a6d958621b 100644 (file)
@@ -371,7 +371,7 @@ peerDigestRequest(PeerDigest * pd)
     if (old_e) {
         debugs(72, 5, "peerDigestRequest: found old entry");
 
-        old_e->lock();
+        old_e->lock("peerDigestRequest");
         old_e->createMemObject(url, url, req->method);
 
         fetch->old_sc = storeClientListAdd(old_e, fetch);
@@ -561,7 +561,7 @@ peerDigestFetchReply(void *data, char *buf, ssize_t size)
             /* get rid of 304 reply */
             storeUnregister(fetch->sc, fetch->entry, fetch);
 
-            fetch->entry->unlock();
+            fetch->entry->unlock("peerDigestFetchReply 304");
 
             fetch->entry = fetch->old_entry;
 
@@ -577,7 +577,7 @@ peerDigestFetchReply(void *data, char *buf, ssize_t size)
                 debugs(72, 3, "peerDigestFetchReply: got new digest, releasing old one");
                 storeUnregister(fetch->old_sc, fetch->old_entry, fetch);
                 fetch->old_entry->releaseRequest();
-                fetch->old_entry->unlock();
+                fetch->old_entry->unlock("peerDigestFetchReply 200");
                 fetch->old_entry = NULL;
             }
         } else {
@@ -910,7 +910,7 @@ peerDigestFetchFinish(DigestFetchState * fetch, int err)
         debugs(72, 3, "peerDigestFetchFinish: deleting old entry");
         storeUnregister(fetch->old_sc, fetch->old_entry, fetch);
         fetch->old_entry->releaseRequest();
-        fetch->old_entry->unlock();
+        fetch->old_entry->unlock("peerDigestFetchFinish old");
         fetch->old_entry = NULL;
     }
 
@@ -926,7 +926,7 @@ peerDigestFetchFinish(DigestFetchState * fetch, int err)
     /* unlock everything */
     storeUnregister(fetch->sc, fetch->entry, fetch);
 
-    fetch->entry->unlock();
+    fetch->entry->unlock("peerDigestFetchFinish new");
 
     HTTPMSGUNLOCK(fetch->request);
 
index 0ac8c0714b92cc9115e10e6ed10f8fae8d59d9a3..270f780f1cefc4bf2e0ed5fd8d230ff0eda7c53c 100644 (file)
@@ -230,7 +230,7 @@ try_again:
 
     if (entry->locked()) {
 
-        entry->lock();
+        entry->lock("heap_purgeNext");
         linklistPush(&heap_walker->locked_entries, entry);
 
         goto try_again;
@@ -263,7 +263,7 @@ heap_purgeDone(RemovalPurgeWalker * walker)
     while ((entry = (StoreEntry *)linklistShift(&heap_walker->locked_entries))) {
         heap_node *node = heap_insert(h->theHeap, entry);
         h->setPolicyNode(entry, node);
-        entry->unlock();
+        entry->unlock("heap_purgeDone");
     }
 
     safe_free(walker->_data);
index 17a634a6d13792d110f21731b9a77f3329f3eece..69c0a0403d9f4208111b7979ad2818066bc90130 100644 (file)
@@ -1243,11 +1243,8 @@ StoreEntry::release()
         setPrivateKey();
 
         if (swap_filen > -1) {
-            /*
-             * Fake a call to StoreEntry->lock()  When rebuilding is done,
-             * we'll just call StoreEntry->unlock() on these.
-             */
-            lock("StoreEntry::release+rebuilding");
+            // lock the entry until rebuilding is done
+            lock("storeLateRelease");
             setReleaseFlag();
             LateReleaseStack.push_back(this);
         } else {
index 1a636252f91ec2ad23ee5e3c0012affdc4a143b2..fd3c64707446a54e6020acb86fca549045de65ae 100644 (file)
@@ -442,7 +442,7 @@ storeDigestRewriteFinish(StoreEntry * e)
            " (" << std::showpos << (int) (e->expires - squid_curtime) << ")");
     /* is this the write order? @?@ */
     e->mem_obj->unlinkRequest();
-    e->unlock();
+    e->unlock("storeDigestRewriteFinish");
     sd_state.rewrite_lock = NULL;
     ++sd_state.rewrite_count;
     eventAdd("storeDigestRewriteStart", storeDigestRewriteStart, NULL, (double)
index 3f209553b712e0999d14f0d9576350a87658ece4..cf7cc4055eb0f868c48bcdac4122cf29e79c1e9f 100644 (file)
@@ -251,7 +251,7 @@ testRock::testRockSwapOut()
 
         CPPUNIT_ASSERT_EQUAL(SWAPOUT_DONE, pe->swap_status);
 
-        pe->unlock();
+        pe->unlock("testRock::testRockSwapOut");
     }
 
     CPPUNIT_ASSERT_EQUAL((uint64_t)5, store->currentCount());
index ca53aa9660a5076f83d3f42dbe0445189a73c4b5..342687ae302bab361f284be35fe1739ebfcda6b6 100644 (file)
@@ -165,7 +165,7 @@ testUfs::testUfsSearch()
         pe->swapOut();
         CPPUNIT_ASSERT_EQUAL(0, pe->swap_dirn);
         CPPUNIT_ASSERT_EQUAL(0, pe->swap_filen);
-        pe->unlock();
+        pe->unlock("testUfs::testUfsSearch vary");
     }
 
     storeDirWriteCleanLogs(0);