]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Fixed busy slot accounting
authorAlex Rousskov <rousskov@measurement-factory.com>
Sun, 6 Feb 2011 04:44:08 +0000 (21:44 -0700)
committerAlex Rousskov <rousskov@measurement-factory.com>
Sun, 6 Feb 2011 04:44:08 +0000 (21:44 -0700)
The number of busy slots does not go up when a new slot overwrites an old one.

src/fs/rock/RockDirMap.cc

index 3d716fdc567c32235f4ef07321659d24d47c2421..e230fb7a502b0a1f4c21e82758dbaf1bdca06764 100644 (file)
@@ -43,10 +43,11 @@ Rock::DirMap::openForWriting(const cache_key *const key, sfileno &fileno)
 
     if (s.exclusiveLock()) {
         assert(s.state != Slot::Writeable); // until we start breaking locks
+        if (s.state == Slot::Empty) // we may also overwrite a Readable slot
+            ++shared->count;
         s.state = Slot::Writeable;
         s.setKey(key);
         fileno = idx;
-        ++shared->count;
         debugs(79, 5, HERE << " opened slot at " << fileno << " for key " <<
                storeKeyText(key) << " for writing in map [" << path << ']');
         return &s.seBasics; // and keep the entry locked
@@ -118,11 +119,12 @@ Rock::DirMap::putAt(const StoreEntry &e, const sfileno fileno)
 
     if (s.exclusiveLock()) {
         assert(s.state != Slot::Writeable); // until we start breaking locks
+        if (s.state == Slot::Empty) // we may also overwrite a Readable slot
+            ++shared->count;
         s.setKey(static_cast<const cache_key*>(e.key));
         s.seBasics.set(e);
         s.state = Slot::Readable;
         s.releaseExclusiveLock();
-        ++shared->count;
         debugs(79, 5, HERE << " put slot at " << fileno << " for key " <<
                storeKeyText(key) << " in map [" << path << ']');
         return true;