This fix just papers over the problem, it does not properly root it out: the underlying issue is that slipped timeouts are re-scheduled unter the write-lock after the wheelCursor has already been advanced, which means that the readLock is taken by the same thread that holds the writeLock already, breaking the assumptions about remainingRounds vs. offset.