Had a similar problem. The fact that it doesn't hang when you use a regular mutex means two things: (1) the mutex in that case is recursive; (2) this piece of code is definetly being reached by another thread (since there is no other calls within the provided block, so not a recursion case). So, dude, check your code again and again...