should this be a `defer h.mutex.Unlock()`?