From 13e9a639b79855db70b5408eb66f266d4c9e68a5 Mon Sep 17 00:00:00 2001 From: Simon Date: Thu, 17 Nov 2016 14:33:51 -0800 Subject: [PATCH] Fix threading issue when initializing public params. --- src/zcash/JoinSplit.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/zcash/JoinSplit.cpp b/src/zcash/JoinSplit.cpp index ccc6a6e23..dad15316e 100644 --- a/src/zcash/JoinSplit.cpp +++ b/src/zcash/JoinSplit.cpp @@ -5,6 +5,7 @@ #include "zcash/util.h" #include +#include #include #include @@ -24,8 +25,9 @@ namespace libzcash { #include "zcash/circuit/gadget.tcc" +std::once_flag init_public_params_once_flag; + CCriticalSection cs_ParamsIO; -CCriticalSection cs_InitializeParams; CCriticalSection cs_LoadKeys; template @@ -79,9 +81,7 @@ public: ~JoinSplitCircuit() {} static void initialize() { - LOCK(cs_InitializeParams); - - ppzksnark_ppT::init_public_params(); + std::call_once (init_public_params_once_flag, ppzksnark_ppT::init_public_params); } void setProvingKeyPath(std::string path) {