summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 5f2f969)
raw | patch | inline | side by side (parent: 5f2f969)
author | Marc Fournier <marc.fournier@camptocamp.com> | |
Wed, 15 Jan 2014 23:30:42 +0000 (00:30 +0100) | ||
committer | Marc Fournier <marc.fournier@camptocamp.com> | |
Wed, 15 Jan 2014 23:36:01 +0000 (00:36 +0100) |
src/network.c | patch | blob | history |
diff --git a/src/network.c b/src/network.c
index be82c6f5108c6cbc65ae9c515d3e799585cd6002..f379a5c44e82e688371b08fcf2153596fb86374f 100644 (file)
--- a/src/network.c
+++ b/src/network.c
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 */