if init fails, how does close behave ? is it a noop ?
btw, since close can throw exceptions of its own, might be good idea to wrap it in try/catch - so that if finally is getting hit via an exception in the try block, user will know the actual reason for the exception.