this is really odd. I'd expect the release and the obtain method on the same instance? is this possible? I mean we can have SnapshotLock.lock() / unlock() ? or maybe remove the SnapshotLock altogether?