From: Chad Parry Date: Tue, 24 May 2016 18:05:14 +0000 (-0700) Subject: Switch HHWheelTimer::SharedPtr to a standard shared pointer X-Git-Tag: 2016.07.26~208 X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=81959105c3c084dce3e8d7c0c957a19f02f725a8;p=folly.git 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 --- 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));