diff options
author | Craig Tiller <ctiller@google.com> | 2016-11-01 15:13:31 -0700 |
---|---|---|
committer | Craig Tiller <ctiller@google.com> | 2016-11-01 15:13:31 -0700 |
commit | ff8e43aa6cd93ed0082017eda7f4161c814019ba (patch) | |
tree | ef0440f7922bf56553d604dc627cde5b484c422d /test/cpp/microbenchmarks | |
parent | b4d883bfc2e474f928e0f52dd225f69c561966b6 (diff) |
Fix memory corruption
Diffstat (limited to 'test/cpp/microbenchmarks')
-rw-r--r-- | test/cpp/microbenchmarks/bm_fullstack.cc | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/test/cpp/microbenchmarks/bm_fullstack.cc b/test/cpp/microbenchmarks/bm_fullstack.cc index 153e9cf1e4..07cff88544 100644 --- a/test/cpp/microbenchmarks/bm_fullstack.cc +++ b/test/cpp/microbenchmarks/bm_fullstack.cc @@ -226,7 +226,7 @@ static void* tag(intptr_t x) { return reinterpret_cast<void*>(x); } template <class Fixture> static void BM_UnaryPingPong(benchmark::State& state) { EchoTestService::AsyncService service; - Fixture fixture(&service); + std::unique_ptr<Fixture> fixture(new Fixture(&service)); EchoRequest send_request; EchoResponse send_response; EchoResponse recv_response; @@ -244,20 +244,20 @@ static void BM_UnaryPingPong(benchmark::State& state) { new (server_env[0]) ServerEnv; new (server_env[1]) ServerEnv; service.RequestEcho(&server_env[0]->ctx, &server_env[0]->recv_request, - &server_env[0]->response_writer, fixture.cq(), - fixture.cq(), tag(0)); + &server_env[0]->response_writer, fixture->cq(), + fixture->cq(), tag(0)); service.RequestEcho(&server_env[1]->ctx, &server_env[1]->recv_request, - &server_env[1]->response_writer, fixture.cq(), - fixture.cq(), tag(1)); + &server_env[1]->response_writer, fixture->cq(), + fixture->cq(), tag(1)); std::unique_ptr<EchoTestService::Stub> stub( - EchoTestService::NewStub(fixture.channel())); + EchoTestService::NewStub(fixture->channel())); while (state.KeepRunning()) { ClientContext cli_ctx; std::unique_ptr<ClientAsyncResponseReader<EchoResponse>> response_reader( - stub->AsyncEcho(&cli_ctx, send_request, fixture.cq())); + stub->AsyncEcho(&cli_ctx, send_request, fixture->cq())); void* t; bool ok; - GPR_ASSERT(fixture.cq()->Next(&t, &ok)); + GPR_ASSERT(fixture->cq()->Next(&t, &ok)); GPR_ASSERT(ok); GPR_ASSERT(t == tag(0) || t == tag(1)); intptr_t slot = reinterpret_cast<intptr_t>(t); @@ -265,7 +265,7 @@ static void BM_UnaryPingPong(benchmark::State& state) { senv->response_writer.Finish(send_response, Status::OK, tag(3)); response_reader->Finish(&recv_response, &recv_status, tag(4)); for (int i = (1 << 3) | (1 << 4); i != 0;) { - GPR_ASSERT(fixture.cq()->Next(&t, &ok)); + GPR_ASSERT(fixture->cq()->Next(&t, &ok)); GPR_ASSERT(ok); int tagnum = (int)reinterpret_cast<intptr_t>(t); GPR_ASSERT(i & (1 << tagnum)); @@ -276,8 +276,9 @@ static void BM_UnaryPingPong(benchmark::State& state) { senv->~ServerEnv(); senv = new (senv) ServerEnv(); service.RequestEcho(&senv->ctx, &senv->recv_request, &senv->response_writer, - fixture.cq(), fixture.cq(), tag(slot)); + fixture->cq(), fixture->cq(), tag(slot)); } + fixture.reset(); server_env[0]->~ServerEnv(); server_env[1]->~ServerEnv(); } |