В работе учавствуют фактически 3 потока - цикл событий Qt, новый поток и ядро. Ядро вносит вклад сигналами, если я верно понимаю, что коллбеки ALSA активирует по сигналам.
30 раз в секунду срабатывает QTimer (анимация интерфейса), раз 50 в секунду фигачит ALSA-коллбек (за новыми пакетами звука приходит, а они мелкие) иногда оба этих потока (QTimer, ALSA) запрашивают у третьего данные из файла (WAV). Это механизм примитивен, на первый взгляд отлажен и т.п.
Короче, всё это дело работает какое-то время, потом то через минуту, то через 20 минут вешается. Перестают приходить ALSA-коллбеки (что странно, если учесть, что сигналы могут приходить, пока предыдущий обработчик сигнала не завершился), перестаёт фигачить QTimer (его обработчик наверное запинается об какой-то мьютекс), естественно интерфейс тоже вешается, т.к. он живёт через тот же цикл обработки событий Qt, откуда растут ноги у сигналов от QTimer.
Короче я не могу запостить код - никто не будет смотреть кучу исходников, никому это не нужно. gdb не факт, что хорошо всё покажет.
Под windows есть intel vtune amplifier XE 2011, который графически рисует поведение всех потоков со всеми мьютексами, легко видишь кто кого повесил.
Под linux-то как жить?