Проблема 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.
Большое спасибо,
Решение
Похоже, что VMIME имеет ошибку, связанную с использованием GNUTLS в случае многопоточного приложения. Я сделал то, что говорит на документации Gnutls на следующей странице:
http://www.gnu.org/software/gnutls/manual/gnutls.html#multi_002dthreaded-aplications.
Я просто добавил линию:
gcry_control (GCRYCTL_SET_THREAD_CBS, &gcry_threads_pthread);
До линии:
gnutls_global_init();
В файле:
net_tls_TLSSession.cpp
и восстановить VMIME. Конечно, я включил нужные заголовочные файлы, показанные в примере документации.