The yielding code in PlanYieldPolicy does the following:
- Releases its locks
- Rolls-back the storage transaction via abandonSnapshot()
- Re-acquires its locks
The global lock synchronizes access to the storage engine for shutdown and rollback. This order of operations can result in the operation unsafely accessing the storage engine during these periods.
This has existed since at least 3.6.
- is duplicated by
-
SERVER-74809 Yield call into storage engine after releasing global lock
- Closed
-
SERVER-79761 GlobalLock can segfault due to not actually holding lock
- Closed
- is related to
-
SERVER-88944 Use something better than the GlobalLock to protect storage engine access
- Backlog