Details
Description
Non-atomic update of a concurrently shared value
Defect 100734 (STATIC_C)
Checker ATOMICITY (subcategory none)
File: /src/mongo/db/storage/kv/kv_storage_engine.cpp
Function mongo::KVStorageEngine::dropDatabase(mongo::OperationContext *, mongo::StringData)
/src/mongo/db/storage/kv/kv_storage_engine.cpp, line: 217
Locking "this->_dbsLock".
stdx::lock_guard<stdx::mutex> lk(_dbsLock);
|
/src/mongo/db/storage/kv/kv_storage_engine.cpp, line: 221
Assigning data that might be protected by the lock to "entry".
entry = it->second;
|
/src/mongo/db/storage/kv/kv_storage_engine.cpp, line: 222
Unlocking "lk._M_device". "entry" might now be unreliable because other threads can now change the data that it depends on.
}
|
/src/mongo/db/storage/kv/kv_storage_engine.cpp, line: 243
Locking "this->_dbsLock" again.
stdx::lock_guard<stdx::mutex> lk(_dbsLock);
|
/src/mongo/db/storage/kv/kv_storage_engine.cpp, line: 244
Using an unreliable value of "entry" inside the second locked section. If the data that "entry" depends on was changed by another thread, this use might be incorrect.
opCtx->recoveryUnit()->registerChange(new RemoveDBChange(this, db, entry));
|