Avoid deprecated Singleton<T>::get() in folly/futures
authorYedidya Feldblum <yfeldblum@fb.com>
Mon, 30 Nov 2015 23:29:32 +0000 (15:29 -0800)
committerfacebook-github-bot-4 <folly-bot@fb.com>
Tue, 1 Dec 2015 00:20:20 +0000 (16:20 -0800)
Summary: [Folly] Avoid deprecated `Singleton<T>::get()` in `folly/futures`.

Changes `getTimekeeperSingleton()` to return a `shared_ptr<Timekeeper>`, and patches its call-sites.

Additionally, have the call-sites keep the singleton instance alive for the duration that it is being directly used.

Reviewed By: ddrcoder

Differential Revision: D2702361

fb-gh-sync-id: 82b72ee514dc4f2a7f7522af8b2e92b34df063d6

folly/futures/Future-inl.h
folly/futures/Future.cpp
folly/futures/ThreadWheelTimekeeper.cpp
folly/futures/test/TimekeeperTest.cpp

index 6fb85a33e34f4b06d5e5da1d653b4e09ac20e1e4..3a919ff489231c1b5a110cb1b2b3ad6571ec9077 100644 (file)
@@ -33,7 +33,7 @@ namespace folly {
 class Timekeeper;
 
 namespace detail {
-  Timekeeper* getTimekeeperSingleton();
+  std::shared_ptr<Timekeeper> getTimekeeperSingleton();
 }
 
 template <class T>
@@ -889,8 +889,10 @@ Future<T> Future<T>::within(Duration dur, E e, Timekeeper* tk) {
     std::atomic<bool> token {false};
   };
 
+  std::shared_ptr<Timekeeper> tks;
   if (!tk) {
-    tk = folly::detail::getTimekeeperSingleton();
+    tks = folly::detail::getTimekeeperSingleton();
+    tk = DCHECK_NOTNULL(tks.get());
   }
 
   auto ctx = std::make_shared<Context>(std::move(e));
index bbab4003741f11757cb4ccc73d6bf17296a80ad4..7cc623e3fc414898fc69d0057c44b4d89836a33e 100644 (file)
@@ -32,8 +32,10 @@ template class Future<double>;
 namespace folly { namespace futures {
 
 Future<Unit> sleep(Duration dur, Timekeeper* tk) {
+  std::shared_ptr<Timekeeper> tks;
   if (LIKELY(!tk)) {
-    tk = folly::detail::getTimekeeperSingleton();
+    tks = folly::detail::getTimekeeperSingleton();
+    tk = DCHECK_NOTNULL(tks.get());
   }
   return tk->after(dur);
 }
index 4179e99fc16deb04e3bdfb0c02bc7fe7214b0a04..37ddf08daf0fdfd8491f38fa44e4ab783c022726 100644 (file)
@@ -138,8 +138,8 @@ Future<Unit> ThreadWheelTimekeeper::after(Duration dur) {
 
 namespace detail {
 
-Timekeeper* getTimekeeperSingleton() {
-  return timekeeperSingleton_.get();
+std::shared_ptr<Timekeeper> getTimekeeperSingleton() {
+  return timekeeperSingleton_.try_get();
 }
 
 } // detail
index eddf2e811739db0e7f187f476130c64108d24d10..316d48bfe4b5079276e7f90d1a731ba407aa70dd 100644 (file)
@@ -37,7 +37,7 @@ struct TimekeeperFixture : public testing::Test {
     timeLord_(folly::detail::getTimekeeperSingleton())
   {}
 
-  Timekeeper* timeLord_;
+  std::shared_ptr<Timekeeper> timeLord_;
 };
 
 TEST_F(TimekeeperFixture, after) {