From 81959105c3c084dce3e8d7c0c957a19f02f725a8 Mon Sep 17 00:00:00 2001 From: Chad Parry Date: Tue, 24 May 2016 11:05:14 -0700 Subject: [PATCH] Switch HHWheelTimer::SharedPtr to a standard shared pointer Summary: As part of my campaign to get `HHWheelTimer` away from intrusive ref-counting semantics, (cf. D3237530), I am redefining `HHWheelTimer::SharedPtr`. It is now a true `std::shared_ptr`. This will break clients that attempt the following: HHWheelTimer::UniquePtr timer1{HHWheelTimer::newTimer()}; HHWheelTimer::SharedPtr timer2{timer1}; In the past, that code would compile, because `timer2` could use the intrusive ref-counting, and `timer1` would still be valid. After this change, the second timer would need to be initialized with `std::move(timer1)` instead. The `UniquePtr` is starting to actually be unique. There is only one place in the code that actually tries to do such a copy. It's in a test, which I have changed. Any other instances of that behavior would create a compilation error, so it's impossible for one to be overlooked. Reviewed By: djwatson Differential Revision: D3337038 fbshipit-source-id: 085e4da41c9a142d253a1ac0b1dd0fc508dff704 --- folly/io/async/HHWheelTimer.h | 2 +- folly/io/async/test/HHWheelTimerTest.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/folly/io/async/HHWheelTimer.h b/folly/io/async/HHWheelTimer.h index f6df7ac9..d708d019 100644 --- a/folly/io/async/HHWheelTimer.h +++ b/folly/io/async/HHWheelTimer.h @@ -61,7 +61,7 @@ class HHWheelTimer : private folly::AsyncTimeout, public: // This type has always been a misnomer, because it is not a unique pointer. using UniquePtr = std::unique_ptr; - using SharedPtr = IntrusivePtr; + using SharedPtr = std::shared_ptr; template static UniquePtr newTimer(Args&&... args) { diff --git a/folly/io/async/test/HHWheelTimerTest.cpp b/folly/io/async/test/HHWheelTimerTest.cpp index df38277d..90b260be 100644 --- a/folly/io/async/test/HHWheelTimerTest.cpp +++ b/folly/io/async/test/HHWheelTimerTest.cpp @@ -453,7 +453,7 @@ TEST_F(HHWheelTimerTest, cancelAll) { EXPECT_EQ(1, tt.canceledTimestamps.size()); } -TEST_F(HHWheelTimerTest, SharedPtr) { +TEST_F(HHWheelTimerTest, IntrusivePtr) { HHWheelTimer::UniquePtr t( HHWheelTimer::newTimer(&eventBase, milliseconds(1))); @@ -466,7 +466,7 @@ TEST_F(HHWheelTimerTest, SharedPtr) { t->scheduleTimeout(&t1, milliseconds(5)); t->scheduleTimeout(&t2, milliseconds(5)); - HHWheelTimer::SharedPtr s(t); + DelayedDestruction::IntrusivePtr s(t); s->scheduleTimeout(&t3, milliseconds(10)); -- 2.34.1