-
Type:
Task
-
Resolution: Gone away
-
Priority:
Major - P3
-
None
-
Affects Version/s: None
-
Component/s: None
-
Query
-
5
-
None
-
3
-
None
-
None
-
None
-
None
-
None
-
None
When iterating over collection CursorManager instances we will:
- Build a list of namespaces from the CursorManager::_idToNss map under the CursorManager::_mutex.
- Release the CursorManager::_mutex and then iterate over the namespaces.
- MODE_IS lock each namespace using AutoGetCollection
- Under the lock, perform an operation on the collection's CursorManager.
It is possible that in between releasing CursorManager::_mutex and locking the collection namespace that a collection is dropped and recreated as a view. If this occurs, the call to AutoGetCollection will uassert when encountering the view. Instead we should change our collection locking mechanism to recognize that a namespace is now a view and skip the namespace, rather than uassert.