aboutsummaryrefslogtreecommitdiffhomepage
path: root/test/cpp/microbenchmarks
diff options
context:
space:
mode:
authorGravatar Craig Tiller <ctiller@google.com>2016-11-01 15:13:31 -0700
committerGravatar Craig Tiller <ctiller@google.com>2016-11-01 15:13:31 -0700
commitff8e43aa6cd93ed0082017eda7f4161c814019ba (patch)
treeef0440f7922bf56553d604dc627cde5b484c422d /test/cpp/microbenchmarks
parentb4d883bfc2e474f928e0f52dd225f69c561966b6 (diff)
Fix memory corruption
Diffstat (limited to 'test/cpp/microbenchmarks')
-rw-r--r--test/cpp/microbenchmarks/bm_fullstack.cc21
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();
}