From: Maged Michael <magedmichael@fb.com> Date: Sat, 20 Jan 2018 05:46:22 +0000 (-0800) Subject: Fix integer sign consistency. X-Git-Tag: v2018.01.22.00^0 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=73fbda10ad950396a9869ebc60df8f2ef52cd5f8;p=folly.git Fix integer sign consistency. Summary: Keeping all variables that interact with hazptr_domain::rcount_ signed int to avoid conversion errors. Reviewed By: yfeldblum Differential Revision: D6754593 fbshipit-source-id: e283f127a112a529a0e98eb82b6061b44aa9d2ca --- diff --git a/folly/concurrency/test/DynamicBoundedQueueTest.cpp b/folly/concurrency/test/DynamicBoundedQueueTest.cpp index 290df3da..a4421011 100644 --- a/folly/concurrency/test/DynamicBoundedQueueTest.cpp +++ b/folly/concurrency/test/DynamicBoundedQueueTest.cpp @@ -93,17 +93,6 @@ TEST(DynamicBoundedQueue, basic) { basic_test<DMPMC, true>(); } -TEST(DynamicBoundedQueue, size) { - { - folly::DynamicBoundedQueue<int, true, true, true> q(10); - ASSERT_EQ(sizeof(q), 640); - } - { - folly::DynamicBoundedQueue<uint64_t, false, false, false, 7, 4> q(10); - ASSERT_EQ(sizeof(q), 80 + sizeof(folly::hazptr::hazptr_obj_batch)); - } -} - template <template <typename, bool, typename> class Q, bool MayBlock> void move_test() { struct Foo { diff --git a/folly/experimental/hazptr/hazptr-impl.h b/folly/experimental/hazptr/hazptr-impl.h index 3bcf6186..26765c88 100644 --- a/folly/experimental/hazptr/hazptr-impl.h +++ b/folly/experimental/hazptr/hazptr-impl.h @@ -1084,15 +1084,15 @@ inline hazptr_tls_life::~hazptr_tls_life() { * and a thread-safe access only, for now. */ class hazptr_obj_batch { - static constexpr size_t DefaultThreshold = 20; + static constexpr int DefaultThreshold = 20; hazptr_obj* head_{nullptr}; hazptr_obj* tail_{nullptr}; - size_t rcount_{0}; - size_t threshold_{DefaultThreshold}; + int rcount_{0}; + int threshold_{DefaultThreshold}; public: hazptr_obj_batch() {} - hazptr_obj_batch(hazptr_obj* head, hazptr_obj* tail, size_t rcount) + hazptr_obj_batch(hazptr_obj* head, hazptr_obj* tail, int rcount) : head_(head), tail_(tail), rcount_(rcount) {} ~hazptr_obj_batch() { @@ -1135,7 +1135,7 @@ class hazptr_obj_batch { } } - void set_threshold(size_t thresh) { + void set_threshold(int thresh) { threshold_ = thresh; } diff --git a/folly/experimental/hazptr/hazptr.h b/folly/experimental/hazptr/hazptr.h index 5c71b34e..21df54e6 100644 --- a/folly/experimental/hazptr/hazptr.h +++ b/folly/experimental/hazptr/hazptr.h @@ -80,6 +80,9 @@ class hazptr_domain { std::atomic<hazptr_obj*> retired_ = {nullptr}; std::atomic<int> hcount_ = {0}; std::atomic<int> rcount_ = {0}; + /* Using signed int for rcount_ because it may transiently be + * negative. Using signed int for all integer variables that may be + * involved in calculations related to the value of rcount_. */ void objRetire(hazptr_obj*); hazptr_rec* hazptrAcquire();