diff --git a/test/cpp/qps/client_async.cc b/test/cpp/qps/client_async.cc
index 5d9cb4bd0cfc35eeecf9db4310a5e6115e70ec86..081114859ce9dca2d0e89d2b60386f47f0e5e315 100644
--- a/test/cpp/qps/client_async.cc
+++ b/test/cpp/qps/client_async.cc
@@ -243,6 +243,7 @@ class AsyncClient : public ClientImpl<StubType, RequestType> {
         // this thread isn't supposed to shut down
         std::lock_guard<std::mutex> l(shutdown_state_[thread_idx]->mutex);
         if (shutdown_state_[thread_idx]->shutdown) {
+          delete ctx;
           return true;
         } else if (!ctx->RunNextState(ok, entry)) {
           // The RPC and callback are done, so clone the ctx