Note that in my code example, the only reason I used a mutable volatile! object was to save the original exception thrown. If it is acceptable to forget the original exception in all of your use cases, then you could change the value assigned to sentinel to be `(Object.)` (a freshly allocated instance of the java.lang.Object class), and eliminate the `vreset!` call, which is the only occurrence of mutation in my code.