From: Dmitry Kurochkin Date: Tue, 1 Feb 2011 08:49:57 +0000 (+0300) Subject: Shared Rock::DirMap version 12. X-Git-Tag: take01~3 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=2392fb6a6bc2868c3860740514bc8d161befa245;p=thirdparty%2Fsquid.git Shared Rock::DirMap version 12. --- diff --git a/src/fs/rock/RockDirMap.cc b/src/fs/rock/RockDirMap.cc index dd1b7eb469..9b566ccea0 100644 --- a/src/fs/rock/RockDirMap.cc +++ b/src/fs/rock/RockDirMap.cc @@ -45,6 +45,7 @@ Rock::DirMap::openForWriting(const cache_key *const key, sfileno &fileno) if (s.state.swap_if(Slot::Empty, Slot::Writing)) { fileno = idx; s.setKey(key); + ++shared->count; debugs(79, 5, HERE << " opened entry at " << fileno << " for key " << storeKeyText(key) << " for writing in map [" << path << ']'); return &s.seBasics; @@ -63,19 +64,15 @@ Rock::DirMap::closeForWriting(const sfileno fileno) Slot &s = shared->slots[fileno]; assert(s.state == Slot::Writing); ++s.readLevel; - ++shared->count; assert(s.state.swap_if(Slot::Writing, Slot::Usable)); } bool Rock::DirMap::free(const sfileno fileno) { - debugs(79, 5, HERE << " trying to mark entry at " << fileno << " to be " - "freed in map [" << path << ']'); - if (openForReadingAt(fileno)) { - Slot &s = shared->slots[fileno]; - s.state.swap_if(Slot::Usable, Slot::WaitingToBeFreed); - --s.readLevel; + assert(valid(fileno)); + Slot &s = shared->slots[fileno]; + if (s.state.swap_if(Slot::Usable, Slot::WaitingToBeFreed)) { debugs(79, 5, HERE << " marked entry at " << fileno << " to be freed in" " map [" << path << ']'); freeIfNeeded(s);