Ситуация. QNX 6.4.1 x86 1 ядро.
На входе и выходе mqueue.
По devctl даются задания, по devctl же забираются результаты.
Все это делается в двух параллельных потоках (в клиенте).
resmgr содержит две очереди, ограниченные по максимальному/минимальному количеству элементов (mqueue).
Так получается, что задания идут чуть чаще, но блокирование для этого и придумано, чтобы не зависеть от частоты вызовов посылки заданий и получения результатов.
Когда resmgr был однопоточным ситуации дедлока естественны. Так как один поток заблокируется на посылке задания, а другой не вынет вовремя результат, так как менеджер ресурсов занят и выходная очередь также будет переполнена.
Ну я подумал, что надо сделать его многопоточным, чтобы запрос на получение задания обрабатывался параллельно. Виснет все равно.
Причем devctl, который должен вынуть из выходной очереди отправляется из клиента, но в обработчик не попадает.
Перехватил я функцию resmgr_handle, и оказывается, что мое сообщение (призванное вынуть результат из очереди) IO_DEVCTL доставляется, но так как из своей функции я, конечно, вызываю родную resmgr_handle, то виснет именно в ней.
В чем может быть дело, куда дальше рыть. Буду крайне признателен.

Да вот трейс потока, который блокируется. Начинает приходить понимание почему, но нет понимания как с этим бороться.
