When abortActiveTransaction() is called from prepareTransaction(), it should not use maxTransactionLockMillis for its lock acquisitions, since writing the abort oplog entry must always succeed. However, this is only safe if the thread is not holding any locks, since otherwise it could self-deadlock. Thus the order of operations for abortActiveTransaction() should be:
- Reserve oplog slot.
- Abort storage transaction and reset locker.
- Write abort oplog entry.