Well I look at it like this to optimize without definitive reason to is detrimental. I use defers in a situation were there are multiple return paths but the lock can be released at any one of them. I use the manual unlocking when I have specific sections that I must release the lock to prevent a deadlock from code further down the block.

The fillPool() function has this logic. I will explain that beside your line comment.