2

ユーザーの電子メール アカウントをチェックするアプリケーションを C++ で開発しています。このアプリケーションは vime ライブラリを使用して、POP3/IMAP/SMTP プロトコルに関する処理を行います。

継続的に動作するようにアプリケーションを設計しました。だから、それは十分に安定している必要があります!

時々、アプリケーションが突然この奇妙なエラーを出さなくなります:

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

vime は libgnutls を使用し、これは libgcrypt を使用することを知っています。

誰でもこのエラーの解決を手伝ってもらえますか?

詳細については、アプリケーションはマルチスレッドです。vime-0.9.0、libgcrypt-1.4.4、および libgnutls-2.8.5 を使用しています。

どうもありがとう、

4

1 に答える 1

2

vime には、マルチスレッド アプリケーションの場合の 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

そしてvimeを再構築しました。もちろん、ドキュメントの例に示されている必要なヘッダー ファイルを含めました。

于 2010-10-21T14:19:19.653 に答える