Eliminate data-race caused by specialization in vector<bool>

pull/2273/head
Vijay Pai 10 years ago
parent 23ca82ab54
commit e2980cd0b3
  1. 13
      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<bool>
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<std::unique_ptr<CompletionQueue>> cli_cqs_;
std::vector<deadline_list> rpc_deadlines_; // per thread deadlines
std::vector<int> next_channel_; // per thread round-robin channel ctr
std::vector<bool> issue_allowed_; // may this thread attempt to issue
std::vector<boolean> issue_allowed_; // may this thread attempt to issue
std::vector<grpc_time> next_issue_; // when should it issue?
std::vector<std::mutex> channel_lock_;

Loading…
Cancel
Save