The code was inconsistent with itself: that's not circular. Every path dropped the lock except one.