The order of the calls is important. Especially releasing the mutex before waking the wait condition - if other things happen in the mean time you could end up in trouble.

The difference in release and debug mode could just be a sign that you've got a race condition. QMutex's behavior is the same in debug and release mode.

Could you post some sample code?