Привет,
Есть проектик в котором используются мутексы, обычные, не рекурсивные. Инициализируются через PTHREAD_MUTEX_INITIALIZER. Используются аккуратно: сами мутексы завернуты с сиплюсовый класс, и локер идёт отдельным классом, в конструкторе блокирует, в деструкторе отпускает. Всё работает, проблем нет, дедлоков нет. pthread_mutex_trylock не используется нигде.
Понадобилось в одном месте сделать рекурсивную блокирвку. Ну, не долго думая, переделал в классе мутекса инициализацию. Больше ничего не менял. Оба-на! Всё нахрен сломалось. Ладно, сделал на всякий случай трассировку локов-анлоков -- с трассировкой работает
Поэтому уточнить что именно сломалось мне пока сложно, нужна какая-то диагностика. Не крашится.
Как такое может быть вообще? По идее я добавил мутексам возможность, которая, по идее, нигде не используется. Так как иначе это были бы дедлоки. То есть поведение не должно было меняться вообще никак. А оно тем не менее изменилось радикально.
ОС — Убунта. Проблему в итоге решил иначе, без рекурсивных мутексов.