]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Added StoreEntry::lock() call dropped when merging from trunk r13172.
authorAlex Rousskov <rousskov@measurement-factory.com>
Wed, 18 Dec 2013 22:32:14 +0000 (15:32 -0700)
committerAlex Rousskov <rousskov@measurement-factory.com>
Wed, 18 Dec 2013 22:32:14 +0000 (15:32 -0700)
src/store_client.cc

index 092402094f42fcf5c2c88b5add53eb30c2ccadb5..7e8e5d8927c23ae452ce37eef5e695e228551cdc 100644 (file)
@@ -720,6 +720,9 @@ storeUnregister(store_client * sc, StoreEntry * e, void *data)
     delete sc;
 
     assert(e->locked());
+    // An entry locked by others may be unlocked (and destructed) by others, so
+    // we must lock again to safely dereference e after CheckQuickAbort().
+    e->lock("storeUnregister");
 
     if (mem->nclients == 0)
         CheckQuickAbort(e);
@@ -730,7 +733,7 @@ storeUnregister(store_client * sc, StoreEntry * e, void *data)
     e->kickProducer();
 #endif
 
-    e->unlock(); // after the "++e->lock_count" above
+    e->unlock("storeUnregister");
     return 1;
 }