use thread_local instead of ThreadLocal for some statics in Random
authorMark McDuff <mcduff@fb.com>
Thu, 16 Jul 2015 23:27:21 +0000 (16:27 -0700)
committerfacebook-github-bot-9 <folly-bot@fb.com>
Thu, 10 Sep 2015 22:20:18 +0000 (15:20 -0700)
Summary: Exit synchronization is the worst!  The worst!

Reviewed By: @​bmaurer

Differential Revision: D2253073

folly/Random.cpp

index 62eb8f9fbc23ac5f450f6d8de8ccf4ca3f30c250..9b960de0530e21ade261511173dc8a01b6c2562c 100644 (file)
@@ -108,18 +108,13 @@ void BufferedRandomDevice::getSlow(unsigned char* data, size_t size) {
   ptr_ += size;
 }
 
-
 }  // namespace
 
 void Random::secureRandom(void* data, size_t size) {
-  static ThreadLocal<BufferedRandomDevice> bufferedRandomDevice;
-  bufferedRandomDevice->get(data, size);
+  static thread_local BufferedRandomDevice bufferedRandomDevice;
+  bufferedRandomDevice.get(data, size);
 }
 
-ThreadLocalPRNG::ThreadLocalPRNG() {
-  static folly::ThreadLocal<ThreadLocalPRNG::LocalInstancePRNG> localInstance;
-  local_ = localInstance.get();
-}
 
 class ThreadLocalPRNG::LocalInstancePRNG {
  public:
@@ -128,6 +123,11 @@ class ThreadLocalPRNG::LocalInstancePRNG {
   Random::DefaultGenerator rng;
 };
 
+ThreadLocalPRNG::ThreadLocalPRNG() {
+  static thread_local ThreadLocalPRNG::LocalInstancePRNG localInstance;
+  local_ = &localInstance;
+}
+
 uint32_t ThreadLocalPRNG::getImpl(LocalInstancePRNG* local) {
   return local->rng();
 }