From 793c2046de1ac04689d541a5e83513fe8e62578c Mon Sep 17 00:00:00 2001 From: Marc Fournier Date: Thu, 16 Jan 2014 00:30:42 +0100 Subject: [PATCH] network: comment libgcrypt initalization process --- src/network.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/network.c b/src/network.c index be82c6f5..f379a5c4 100644 --- a/src/network.c +++ b/src/network.c @@ -500,8 +500,15 @@ static void network_init_gcrypt (void) /* {{{ */ if (gcry_control (GCRYCTL_ANY_INITIALIZATION_P)) return; + /* http://www.gnupg.org/documentation/manuals/gcrypt/Multi_002dThreading.html + * To ensure thread-safety, it's important to set GCRYCTL_SET_THREAD_CBS + * *before* initalizing Libgcrypt with gcry_check_version(), which itself must + * be called before any other gcry_* function. GCRYCTL_ANY_INITIALIZATION_P + * above doesn't count, as it doesn't implicitly initalize Libgcrypt. + * + * tl;dr: keep all these gry_* statements in this exact order please. */ gcry_control (GCRYCTL_SET_THREAD_CBS, &gcry_threads_pthread); - gcry_check_version (NULL); /* before calling *almost* any other functions */ + gcry_check_version (NULL); gcry_control (GCRYCTL_INIT_SECMEM, 32768); gcry_control (GCRYCTL_INITIALIZATION_FINISHED); } /* }}} void network_init_gcrypt */ -- 2.11.0