awaitUninterruptibly
Implements uninterruptible condition wait.
Save lock state returned by .getState.
Invoke .release with saved state as argument, throwing IllegalMonitorStateException if it fails.
Block until signalled.
Reacquire by invoking specialized version of .acquire with saved state as argument.