there are a couple early returns where this `Unlock()` wont get called, we should probably just `defer this.Unlock()` right after the line where we `this.Lock()`