From 3c8e331809f9080ea1f34cce9efb76804f7c18f8 Mon Sep 17 00:00:00 2001 From: orignal Date: Thu, 26 Nov 2015 14:00:40 -0500 Subject: [PATCH] Ed25519 per thread --- Signature.cpp | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/Signature.cpp b/Signature.cpp index a6d519a1..45b3c303 100644 --- a/Signature.cpp +++ b/Signature.cpp @@ -395,12 +395,26 @@ namespace crypto // Bi16[0][0] = B, base point }; - static std::unique_ptr g_Ed25519; - std::unique_ptr& GetEd25519 () + static std::shared_ptr g_Ed25519; +#if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 8)) // gcc 4.8 and higer + static thread_local std::shared_ptr g_Ed25519ThisThread; +#else + static std::shared_ptr g_Ed25519ThisThread; +#endif + std::shared_ptr& GetEd25519 () { - if (!g_Ed25519) - g_Ed25519.reset (new Ed25519 ()); - return g_Ed25519; + // TODO: implement it better + if (!g_Ed25519ThisThread) + { + if (!g_Ed25519) + { + g_Ed25519 = std::make_shared(); + g_Ed25519ThisThread = g_Ed25519; + } + else + g_Ed25519ThisThread = std::make_shared(*g_Ed25519); + } + return g_Ed25519ThisThread; }