From 9440a14558e6d43db52edcaa916374d12a3df677 Mon Sep 17 00:00:00 2001
From: vjpai <vpai@google.com>
Date: Fri, 27 Feb 2015 09:19:09 -0800
Subject: [PATCH] Move std::bind call out of main loop, change constructor
 appropriately

---
 test/cpp/qps/client_async.cc | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/test/cpp/qps/client_async.cc b/test/cpp/qps/client_async.cc
index a897c28dc7..8cb11b89c4 100644
--- a/test/cpp/qps/client_async.cc
+++ b/test/cpp/qps/client_async.cc
@@ -109,19 +109,22 @@ template <class RequestType, class ResponseType>
 class ClientRpcContextUnaryImpl : public ClientRpcContext {
  public:
   ClientRpcContextUnaryImpl(
+      TestService::Stub *stub,
       const RequestType &req,
       std::function<
           std::unique_ptr<grpc::ClientAsyncResponseReader<ResponseType>>(
-              grpc::ClientContext *, const RequestType &, void *)> start_req,
+	      TestService::Stub *, grpc::ClientContext *, const RequestType &,
+	      void *)> start_req,
       std::function<void(grpc::Status, ResponseType *)> on_done)
       : context_(),
+	stub_(stub),
         req_(req),
         response_(),
         next_state_(&ClientRpcContextUnaryImpl::ReqSent),
         callback_(on_done),
         start_(now()),
         response_reader_(
-            start_req(&context_, req_, ClientRpcContext::tag(this))) {}
+	    start_req(stub_, &context_, req_, ClientRpcContext::tag(this))) {}
   ~ClientRpcContextUnaryImpl() GRPC_OVERRIDE {}
   bool operator()() GRPC_OVERRIDE { return (this->*next_state_)(); }
   void report_stats(gpr_histogram *hist) GRPC_OVERRIDE {
@@ -143,6 +146,7 @@ class ClientRpcContextUnaryImpl : public ClientRpcContext {
     return false;
   }
   grpc::ClientContext context_;
+  TestService::Stub *stub_;
   RequestType req_;
   ResponseType response_;
   bool (ClientRpcContextUnaryImpl::*next_state_)();
@@ -221,15 +225,14 @@ static void RunTest(const int client_threads, const int client_channels,
           request.set_response_size(payload_size);
 
           grpc::CompletionQueue cli_cq;
+	  auto start_req = std::bind(&TestService::Stub::AsyncUnaryCall, _1,
+				     _2, _3, &cli_cq, _4);
 
           int rpcs_sent = 0;
           while (rpcs_sent < num_rpcs) {
             rpcs_sent++;
             TestService::Stub *stub = channels[channel_num].get_stub();
-            grpc::ClientContext context;
-            auto start_req = std::bind(&TestService::Stub::AsyncUnaryCall, stub,
-                                       _1, _2, &cli_cq, _3);
-            new ClientRpcContextUnaryImpl<SimpleRequest, SimpleResponse>(
+            new ClientRpcContextUnaryImpl<SimpleRequest, SimpleResponse>(stub,
                 request, start_req, CheckDone);
             void *got_tag;
             bool ok;
-- 
GitLab