Здравствуйте, andrey-x86, Вы писали:
AX>Таким образом, возникает вопрос: что я делаю не так, либо чего я не учитываю?
Такое поведение обычно возникает когда запускается вложенный EventLoop.
Посмотрите, нет ли у вас в коде foo() или в вызываемых им функциях явного вызова QEventLoop::exec() либо метода XXX::processEvents(), где XXX = QEventLoop, QApplication или QCoreApplication. Скорее всего что-то подобное найдется.
Вообще, лучше избегать вложенных EventLoop. Но если это действительно необходимо, то проблему дедлока можно обойти создав mutex с параметром RecursionMode = Recursive. Однако, при этом можно получить несколько других проблем.