vmime, libgnutls et problème libgcrypt? Assertion échouée!
Question
Je développe une application en C ++ pour vérifier les utilisateurs Courriels. Cette application utilise la bibliothèque vmime pour effectuer le traitement en rapport avec POP3 / IMAP / protocoles SMTP.
J'ai conçu l'application fonctionne en continu. Ainsi, il doit être assez stable!
Parfois, l'application cesse tout à coup donner cette étrange erreur:
ath.c:193: _gcry_ath_mutex_lock: Assertion `*lock == ((ath_mutex_t) 0)' failed.
Aborted
Je sais que vmime utilisations libgnutls et celle-ci utilise Libgcrypt.
Quelqu'un peut-il aider à résoudre cette erreur?
Pour plus d'informations, l'application est multi-thread. J'utilise vmime-0.9.0, libgcrypt-1.4.4, et libgnutls-2.8.5.
Merci beaucoup,
La solution
Il semble que vmime a un bug lié à l'utilisation de gnutls dans le cas d'une application multi-thread. Je l'ai fait ce que la documentation de gnutls dit dans la page suivante:
http://www.gnu.org/software/ gnutls / manuel / gnutls.html # Multi_002dthreaded-applications
Je viens de l'ajouter la ligne:
gcry_control (GCRYCTL_SET_THREAD_CBS, &gcry_threads_pthread);
avant la ligne:
gnutls_global_init();
dans le fichier:
net_tls_TLSSession.cpp
et vmime reconstruit. Bien sûr, j'inclus les fichiers d'en-tête nécessaires l'exemple montré dans la documentation.