network: comment libgcrypt initalization process
authorMarc Fournier <marc.fournier@camptocamp.com>
Wed, 15 Jan 2014 23:30:42 +0000 (00:30 +0100)
committerMarc Fournier <marc.fournier@camptocamp.com>
Wed, 15 Jan 2014 23:36:01 +0000 (00:36 +0100)
src/network.c

index be82c6f..f379a5c 100644 (file)
@@ -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 */