If a positive timeout is specified for the FLUSH protocol, if the specified waiting time timeout elapses during the notBlockedDown.await(timeout) invocation, the shouldSuspendByItself flag will be set but it will continue looping forever. The if clause below should be moved into the while block.
If the timeout is 0L or negative, instead of waiting forever, it will instantaneously return from the await(timeout) method, but seeing as it can never suspend itself as mentioned earlier, it will loop forever until a STOP_FLUSH or ABORT_FLUSH event is received.
Changing the method to await() for "eternal" timeouts may be dangerous however; There must be a guarantee that the isBlockingFlushDown is toggled even if the FLUSH coordinator fails.