diff --git a/test/cpp/qps/client_async.cc b/test/cpp/qps/client_async.cc index d120a8aaec8..8c8d927d15f 100644 --- a/test/cpp/qps/client_async.cc +++ b/test/cpp/qps/client_async.cc @@ -168,7 +168,7 @@ class AsyncClient : public Client { if (!closed_loop_) { rpc_deadlines_.emplace_back(); next_channel_.push_back(i % channel_count_); - issue_allowed_.push_back(true); + issue_allowed_.emplace_back(true); grpc_time next_issue; NextIssueTime(i, &next_issue); @@ -307,11 +307,20 @@ class AsyncClient : public Client { } private: + class boolean { // exists only to avoid data-race on vector + public: + boolean(): val_(false) {} + boolean(bool b): val_(b) {} + operator bool() const {return val_;} + boolean& operator=(bool b) {val_=b; return *this;} + private: + bool val_; + }; std::vector> cli_cqs_; std::vector rpc_deadlines_; // per thread deadlines std::vector next_channel_; // per thread round-robin channel ctr - std::vector issue_allowed_; // may this thread attempt to issue + std::vector issue_allowed_; // may this thread attempt to issue std::vector next_issue_; // when should it issue? std::vector channel_lock_;