Commit 73fbda10 authored by Maged Michael's avatar Maged Michael Committed by Facebook Github Bot

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
parent e52b2964
...@@ -93,17 +93,6 @@ TEST(DynamicBoundedQueue, basic) { ...@@ -93,17 +93,6 @@ TEST(DynamicBoundedQueue, basic) {
basic_test<DMPMC, true>(); 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> template <template <typename, bool, typename> class Q, bool MayBlock>
void move_test() { void move_test() {
struct Foo { struct Foo {
......
...@@ -1084,15 +1084,15 @@ inline hazptr_tls_life::~hazptr_tls_life() { ...@@ -1084,15 +1084,15 @@ inline hazptr_tls_life::~hazptr_tls_life() {
* and a thread-safe access only, for now. */ * and a thread-safe access only, for now. */
class hazptr_obj_batch { class hazptr_obj_batch {
static constexpr size_t DefaultThreshold = 20; static constexpr int DefaultThreshold = 20;
hazptr_obj* head_{nullptr}; hazptr_obj* head_{nullptr};
hazptr_obj* tail_{nullptr}; hazptr_obj* tail_{nullptr};
size_t rcount_{0}; int rcount_{0};
size_t threshold_{DefaultThreshold}; int threshold_{DefaultThreshold};
public: public:
hazptr_obj_batch() {} 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) {} : head_(head), tail_(tail), rcount_(rcount) {}
~hazptr_obj_batch() { ~hazptr_obj_batch() {
...@@ -1135,7 +1135,7 @@ class hazptr_obj_batch { ...@@ -1135,7 +1135,7 @@ class hazptr_obj_batch {
} }
} }
void set_threshold(size_t thresh) { void set_threshold(int thresh) {
threshold_ = thresh; threshold_ = thresh;
} }
......
...@@ -80,6 +80,9 @@ class hazptr_domain { ...@@ -80,6 +80,9 @@ class hazptr_domain {
std::atomic<hazptr_obj*> retired_ = {nullptr}; std::atomic<hazptr_obj*> retired_ = {nullptr};
std::atomic<int> hcount_ = {0}; std::atomic<int> hcount_ = {0};
std::atomic<int> rcount_ = {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*); void objRetire(hazptr_obj*);
hazptr_rec* hazptrAcquire(); hazptr_rec* hazptrAcquire();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment