Здравствуйте!
При разработке приложения под ЗОСРВ Нейтрино столкнулись со странной проблемой.
Для взаимодействия между компонентами приложения используем очереди сообщений mqueue.
Как известно, в QNX6 есть две реализации этих очередей - "классическая" и построенная на механизме асинхронных сообщений QNX6 (mq).
Мы предполагали использовать именно mq, как имеющий более низкие накладные расходы на передачу сообщений.
Проблема заключается в том, что при отладке в QNX 6.5 приложение работает нормально независимо от того, какой вариант реализации очередей используется. В ЗОСРВ Нейтрино вариант с mq не работает.
В прилагаемом файле два тестовых проекта. Исходный код абсолютно одинаков, отличия только в компоновке (пробовали и статическую, и динамическую компоновку с библиотекой mq).
В примере два потока. Первый поток записывает сообщения в очередь, второй поток читает их из очереди.
Вариант с mqueue выдает следующий лог:
1: mq_open ok -> hd=3
2: start thread
1: mq_send 64 bytes (1)
2: mq_recv 64 bytes (1)
2: mq_recv 64 bytes (2)
1: mq_send 64 bytes (2)
2: mq_recv 64 bytes (3)
1: mq_send 64 bytes (3)
...
Вариант с mq:
1: mq_open ok -> hd=1902968833
2: start thread
mq_send failed: Bad address
mq_send failed: Bad address
mq_send failed: Bad address
mq_send failed: Bad address
mq_send failed: Bad address
....
Т.е. очередь открывается нормально, но при попытке записи возникает ошибка.
В чем может быть причина?