diff options
Diffstat (limited to 'src/mongo/db/commands/dbhash.cpp')
-rw-r--r-- | src/mongo/db/commands/dbhash.cpp | 21 |
1 files changed, 6 insertions, 15 deletions
diff --git a/src/mongo/db/commands/dbhash.cpp b/src/mongo/db/commands/dbhash.cpp index b428514fc29..fe42aea4124 100644 --- a/src/mongo/db/commands/dbhash.cpp +++ b/src/mongo/db/commands/dbhash.cpp @@ -218,24 +218,15 @@ bool DBHashCmd::run(OperationContext* txn, return 1; } -class DBHashCmd::DBHashLogOpHandler : public RecoveryUnit::Change { -public: - DBHashLogOpHandler(DBHashCmd* dCmd, StringData ns) : _dCmd(dCmd), _ns(ns.toString()) {} - void commit() { - stdx::lock_guard<stdx::mutex> lk(_dCmd->_cachedHashedMutex); - _dCmd->_cachedHashed.erase(_ns); - } - void rollback() {} - -private: - DBHashCmd* _dCmd; - const std::string _ns; -}; - void DBHashCmd::wipeCacheForCollection(OperationContext* txn, StringData ns) { if (!isCachable(ns)) return; - txn->recoveryUnit()->registerChange(new DBHashLogOpHandler(this, ns)); + + std::string nsOwned = ns.toString(); + txn->recoveryUnit()->onCommit([this, txn, nsOwned] { + stdx::lock_guard<stdx::mutex> lk(_cachedHashedMutex); + _cachedHashed.erase(nsOwned); + }); } bool DBHashCmd::isCachable(StringData ns) const { |