2010-10-20 7 views
2

Je développe une application en C++ pour vérifier les comptes de messagerie des utilisateurs. Cette application utilise la bibliothèque vmime pour effectuer le traitement lié aux protocoles POP3/IMAP/SMTP.Problème vmime, libgnutls et libgcrypt? Assertion échouée!

J'ai conçu l'application pour travailler en continu. Donc, il doit être assez stable!

Parfois, l'application cesse soudainement de donner cette erreur étrange:

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

Je sais que vmime utilise libgnutls et celui-ci utilise libgcrypt.

Quelqu'un peut-il aider à résoudre cette erreur?

Pour plus d'infos, l'application est multi-threadée. J'utilise vmime-0.9.0, libgcrypt-1.4.4 et libgnutls-2.8.5.

Merci beaucoup,

Répondre

2

Il semble que vmime a un bug lié à l'utilisation de gnutls dans le cas d'une application multi-thread. Je fait ce que la documentation de gnutls dit dans la page suivante:

http://www.gnu.org/software/gnutls/manual/gnutls.html#Multi_002dthreaded-applications

Je viens de la valeur ajoutée de 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 reconstruit vmime. Bien sûr, j'ai inclus les fichiers d'en-tête nécessaires montrés dans l'exemple de documentation.

Questions connexes