В Mac OS X у меня были зависания QMutex даже в 100% правильной логике. Я сделал вызов обертки вокруг QMutex, который увеличил / уменьшил атомный счетчик ссылок, и QMutex завис в месте, где счетчик ссылок означал отсутствие удержанного мьютекса.
Это случилось со мной один раз в Qt3, и еще раз в недавнем Qt (4.6.2 или 4.7.0, я не помню). Замена QMutex пользовательским классом, который идет непосредственно к примитивам ОС, - решила проблему.
Обратите внимание, однако, что эта проблема возникла только на OS X в моем случае. В Windows тот же код работал отлично.