There is a sequence of events in which an RcQueue may return a nil rather than the next element in the queue. No data is lost in this scenario.
The sequence required to get this case is where a session is performing a cleanupQueue and encounters a concurrency conflict against another session that is performing a read. The cleanup session aborts and retries the cleanupQueue, which succeeds. However, the cleanup session has written the removalSequence numbers when it should not, and a read by the other session may now get a nil from the RcQueue.
Last updated: 2/22/18