Revert "Fix folly::ThreadLocal to work in a shared library"
authorLucian Grijincu <lucian@fb.com>
Fri, 20 Nov 2015 20:03:52 +0000 (12:03 -0800)
committerfacebook-github-bot-1 <folly-bot@fb.com>
Fri, 20 Nov 2015 20:20:21 +0000 (12:20 -0800)
Summary: This reverts commit 9d355f96c4fe073c889f28070d5952fa4eb007a0.

build-break

Reviewed By: sctaylor

Differential Revision: D2680784

fb-gh-sync-id: a2df233bcd3721ffbfcd6fd71ea3cabbebebd4c4

folly/Portability.h
folly/detail/ThreadLocalDetail.h
folly/test/ThreadLocalTest.cpp
folly/test/ThreadLocalTestLib.cpp [deleted file]

index 486f25a84655b599fe1dcc5b73512d76b69cc068..bdac6cc33fe714e24a75baed89d2585940923bad 100644 (file)
@@ -397,15 +397,5 @@ constexpr size_t constexpr_strlen(const char* s) {
 #endif
 }
 
-#if defined(__APPLE__) || defined(_MSC_VER)
-#define MAX_STATIC_CONSTRUCTOR_PRIORITY
-#else
-// 101 is the highest priority allowed by the init_priority attribute.
-// This priority is already used by JEMalloc and other memory allocators so
-// we will take the next one.
-#define MAX_STATIC_CONSTRUCTOR_PRIORITY __attribute__ ((__init_priority__(102)))
-#endif
-
-
 } // namespace folly
 #endif // FOLLY_PORTABILITY_H_
index adab219258cc1b799fe026dad40ded9316fbe2be..da3ee0732c1647a9f1b8f1769acf9f29b2e42929 100644 (file)
@@ -220,7 +220,6 @@ struct StaticMeta {
     // worry about synchronization with exiting threads.
     static bool constructed = (inst_ = new StaticMeta<Tag>());
     (void)constructed; // suppress unused warning
-
     return *inst_;
   }
 
@@ -248,27 +247,10 @@ struct StaticMeta {
 #endif
   static StaticMeta<Tag>* inst_;
 
-  /**
-   * We want to disable onThreadExit call at the end of shutdown, we don't care
-   * about leaking memory at that point.
-   *
-   * Otherwise if ThreadLocal is used in a shared library, onThreadExit may be
-   * called after dlclose().
-   */
-  struct PthreadKeyUnregister {
-    ~PthreadKeyUnregister() {
-      if (inst_) {
-        pthread_key_delete(inst_->pthreadKey_);
-      }
-    }
-  };
-  static PthreadKeyUnregister pthreadKeyUnregister_;
-
   StaticMeta() : nextId_(1) {
     head_.next = head_.prev = &head_;
     int ret = pthread_key_create(&pthreadKey_, &onThreadExit);
     checkPosixError(ret, "pthread_key_create failed");
-    (void)pthreadKeyUnregister_; // suppress unused warning
 
 #if FOLLY_HAVE_PTHREAD_ATFORK
     ret = pthread_atfork(/*prepare*/ &StaticMeta::preFork,
@@ -548,10 +530,6 @@ FOLLY_TLS ThreadEntry StaticMeta<Tag>::threadEntry_ = {nullptr, 0,
 #endif
 template <class Tag> StaticMeta<Tag>* StaticMeta<Tag>::inst_ = nullptr;
 
-template <class Tag> typename StaticMeta<Tag>::PthreadKeyUnregister
-MAX_STATIC_CONSTRUCTOR_PRIORITY
-StaticMeta<Tag>::pthreadKeyUnregister_;
-
 }  // namespace threadlocal_detail
 }  // namespace folly
 
index 823c6cb515a778443030f4f8ff6c51bcc726075f..82e6eb4f8cf3097d379c32ac25d11b621fe04bd6 100644 (file)
@@ -16,7 +16,6 @@
 
 #include <folly/ThreadLocal.h>
 
-#include <dlfcn.h>
 #include <sys/types.h>
 #include <sys/wait.h>
 #include <unistd.h>
@@ -38,7 +37,6 @@
 #include <gtest/gtest.h>
 
 #include <folly/Benchmark.h>
-#include <folly/Baton.h>
 
 using namespace folly;
 
@@ -541,47 +539,6 @@ TEST(ThreadLocal, Fork2) {
   }
 }
 
-TEST(ThreadLocal, SharedLibrary)
-{
-  auto handle = dlopen("./_bin/folly/test/lib_thread_local_test.so",
-                       RTLD_LAZY);
-  EXPECT_NE(nullptr, handle);
-
-  typedef void (*useA_t)();
-  dlerror();
-  useA_t useA = (useA_t) dlsym(handle, "useA");
-
-  const char *dlsym_error = dlerror();
-  EXPECT_EQ(nullptr, dlsym_error);
-
-  useA();
-
-  folly::Baton<> b11, b12, b21, b22;
-
-  std::thread t1([&]() {
-      useA();
-      b11.post();
-      b12.wait();
-    });
-
-  std::thread t2([&]() {
-      useA();
-      b21.post();
-      b22.wait();
-    });
-
-  b11.wait();
-  b21.wait();
-
-  dlclose(handle);
-
-  b12.post();
-  b22.post();
-
-  t1.join();
-  t2.join();
-}
-
 // clang is unable to compile this code unless in c++14 mode.
 #if __cplusplus >= 201402L
 namespace {
diff --git a/folly/test/ThreadLocalTestLib.cpp b/folly/test/ThreadLocalTestLib.cpp
deleted file mode 100644 (file)
index 1a81528..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright 2015 Facebook, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#include <iostream>
-#include <thread>
-
-#include <folly/ThreadLocal.h>
-
-class A {
- public:
-  void use() const {
-  }
-};
-
-folly::ThreadLocal<A> a;
-
-extern "C" {
-
-void useA() {
-  a->use();
-}
-
-}