vmime, libgnutls, и проблема libgcrypt? Утверждение не удалось!

Я разрабатываю приложение на C++ для проверки учетных записей электронной почты пользователей. Это приложение использует библиотеку vmime для обработки, связанной с протоколами POP3/IMAP/SMTP.

Я разработал приложение для непрерывной работы. Итак, оно должно быть достаточно стабильным!

Иногда приложение внезапно перестает выдавать эту странную ошибку:

ath.c:193: _gcry_ath_mutex_lock: Assertion `*lock == ((ath_mutex_t) 0)' failed.
Aborted

Я знаю, что vmime использует libgnutls, а этот использует libgcrypt.

Кто-нибудь может помочь в решении этой ошибки?

Для получения дополнительной информации, приложение является многопоточным. Я использую vmime-0.9.0, libgcrypt-1.4.4 и libgnutls-2.8.5.

Спасибо большое,

1 ответ

Решение

Похоже, что в vmime есть ошибка, связанная с использованием gnutls в случае многопоточного приложения. Я сделал то, что говорится в документации gnutls на следующей странице:

http://www.gnu.org/software/gnutls/manual/gnutls.html

Я просто добавил строку:

gcry_control (GCRYCTL_SET_THREAD_CBS, &gcry_threads_pthread);

перед строкой:

gnutls_global_init();

в файле:

net_tls_TLSSession.cpp

и восстановил vmime. Конечно, я включил необходимые заголовочные файлы, показанные в примере документации.

Другие вопросы по тегам