2

我正在用 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。

非常感谢,

4

1 回答 1

2

在多线程应用程序的情况下,似乎 vmime 存在与使用 gnutls 相关的错误。我做了 gnutls 文档在下一页中所说的:

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

我只是添加了这一行:

gcry_control (GCRYCTL_SET_THREAD_CBS, &gcry_threads_pthread);

行前:

gnutls_global_init();

在文件中:

net_tls_TLSSession.cpp

并重建了 vmime。当然,我包含了文档示例中显示的所需头文件。

于 2010-10-21T14:19:19.653 回答