How does the caller break out of this loop when the reset() doesn't work?  The default reset() implementation does nothing, which means the retry attempt inside of the catch block will not change anything and the code will be stuck in a loop forever.