aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Craig Tiller <ctiller@google.com>2017-04-19 08:36:50 -0700
committerGravatar GitHub <noreply@github.com>2017-04-19 08:36:50 -0700
commit7366fe6df380f1860c32b656e778ad33dbc4c5b3 (patch)
tree9d06fdf236750ab244fc50775d7485ae2d57b510
parentd7b72ee9c4dc3984c6b79be5cc1ecdca3e938d0f (diff)
parentf26caeedc64640d4c138616cdb4ba8966d50085f (diff)
Merge pull request #10709 from ctiller/infinite_stream
Fix infinite streams in qps_test
-rw-r--r--test/cpp/qps/client_sync.cc24
1 files changed, 16 insertions, 8 deletions
diff --git a/test/cpp/qps/client_sync.cc b/test/cpp/qps/client_sync.cc
index a020adde51..f8ce2cccbe 100644
--- a/test/cpp/qps/client_sync.cc
+++ b/test/cpp/qps/client_sync.cc
@@ -153,16 +153,22 @@ class SynchronousStreamingClient final : public SynchronousClient {
StartThreads(num_threads_);
}
~SynchronousStreamingClient() {
+ std::vector<std::thread> cleanup_threads;
for (size_t i = 0; i < num_threads_; i++) {
- auto stream = &stream_[i];
- if (*stream) {
- (*stream)->WritesDone();
- Status s = (*stream)->Finish();
- if (!s.ok()) {
- gpr_log(GPR_ERROR, "Stream %" PRIuPTR " received an error %s", i,
- s.error_message().c_str());
+ cleanup_threads.emplace_back([this, i]() {
+ auto stream = &stream_[i];
+ if (*stream) {
+ (*stream)->WritesDone();
+ Status s = (*stream)->Finish();
+ if (!s.ok()) {
+ gpr_log(GPR_ERROR, "Stream %" PRIuPTR " received an error %s", i,
+ s.error_message().c_str());
+ }
}
- }
+ });
+ }
+ for (size_t i = 0; i < num_threads_; i++) {
+ cleanup_threads[i].join();
}
}
@@ -179,6 +185,8 @@ class SynchronousStreamingClient final : public SynchronousClient {
if ((messages_per_stream_ != 0) &&
(++messages_issued_[thread_idx] < messages_per_stream_)) {
return true;
+ } else if (messages_per_stream_ == 0) {
+ return true;
} else {
// Fall through to the below resetting code after finish
}