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();