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. Конечно, я включил необходимые заголовочные файлы, показанные в примере документации.