diff --git a/src/cpp/server/server.cc b/src/cpp/server/server.cc
index 4c44d9ec506a369321f00f133a79bcb9285f1185..f930dbb2b8921eb90a0078e18553c4e5426f4347 100644
--- a/src/cpp/server/server.cc
+++ b/src/cpp/server/server.cc
@@ -369,11 +369,12 @@ Server::GenericAsyncRequest::GenericAsyncRequest(
 bool Server::GenericAsyncRequest::FinalizeResult(void** tag, bool* status) {
   // TODO(yangg) remove the copy here.
   if (*status) {
-    static_cast<GenericServerContext*>(context_)->method_ = call_details_.method;
+    static_cast<GenericServerContext*>(context_)->method_ =
+        call_details_.method;
     static_cast<GenericServerContext*>(context_)->host_ = call_details_.host;
-    gpr_free(call_details_.method);
-    gpr_free(call_details_.host);
   }
+  gpr_free(call_details_.method);
+  gpr_free(call_details_.host);
   return BaseAsyncRequest::FinalizeResult(tag, status);
 }