Segfault с помощью libssl / libcrypto - PullRequest
1 голос
/ 10 октября 2011

Это скорее гипотеза, пока я отлаживаю некоторый код.Допустим, у меня есть приложение (называемое X), которое вызывает библиотеку для отправки электронной почты по SMTP-соединению с шифрованием TLS, в то время как X общается с другой библиотекой, которая устанавливает другой сокет TLS через ту же библиотеку libcrypto,Какова вероятность получения какого-то определенного (и странного) условия, когда один вызов функции потерпит неудачу с segfault?

Я как бы цепляюсь за соломинку, этот код работал нормально до тех пор, пока мы не добавили Skype SDK, который подключается через TLS к серверам Skype, с тех пор мы можем фактически сделать проблему повторяемой, но янемного сбит с толку относительно того, почему.(Я, вероятно, упускаю из виду очевидное, но я начну с очень странной возможности)

Ответы [ 2 ]

2 голосов
/ 10 октября 2011

Существует целая страница руководства, посвященная использованию библиотеки OpenSSL и потоков: man 3 threads.Вам нужно будет использовать это, если ваше приложение имеет несколько потоков, которые используют библиотеку OpenSSL.

2 голосов
/ 10 октября 2011

Вообще говоря, это возможно, но хорошо написанная библиотека должна быть устойчивой к множественному доступу.Возможно, вы захотите просмотреть документацию, чтобы увидеть, является ли их API реентерабельным (или даже безопасным для thred).

Если это потокобезопасный, то (при условии, что авторы libcrypto не ошиблись) вы можетеуверен, что это не причина проблемы.

Если он является реентерабельным, то все, что использует эту библиотеку в двух (или более) потоках, должно быть синхронизировано при доступе (например, с использованием мьютексов), но если части кода не написаны вами и у вас нет выборачтобы изменить это, то вы застряли.Единственное, о чем я могу думать, это использовать другую версию libcrypto, поэтому система создает другой, не связанный экземпляр своей внутренней структуры.Это отвратительная мысль и может вести себя странно на компьютерах пользователей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...