|  | @@ -66,7 +66,7 @@ class RpcMethodHandler : public MethodHandler {
 | 
	
		
			
				|  |  |          return func_(service_, param.server_context,
 | 
	
		
			
				|  |  |                       static_cast<RequestType*>(param.request), &rsp);
 | 
	
		
			
				|  |  |        });
 | 
	
		
			
				|  |  | -      delete static_cast<RequestType*>(param.request);
 | 
	
		
			
				|  |  | +      static_cast<RequestType*>(param.request)->~RequestType();
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      GPR_CODEGEN_ASSERT(!param.server_context->sent_initial_metadata_);
 | 
	
	
		
			
				|  | @@ -86,16 +86,18 @@ class RpcMethodHandler : public MethodHandler {
 | 
	
		
			
				|  |  |      param.call->cq()->Pluck(&ops);
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  void* Deserialize(grpc_byte_buffer* req, Status* status) final {
 | 
	
		
			
				|  |  | +  void* Deserialize(grpc_call* call, grpc_byte_buffer* req,
 | 
	
		
			
				|  |  | +                    Status* status) final {
 | 
	
		
			
				|  |  |      ByteBuffer buf;
 | 
	
		
			
				|  |  |      buf.set_buffer(req);
 | 
	
		
			
				|  |  | -    auto* request = new RequestType();
 | 
	
		
			
				|  |  | +    auto* request = new (g_core_codegen_interface->grpc_call_arena_alloc(
 | 
	
		
			
				|  |  | +        call, sizeof(RequestType))) RequestType();
 | 
	
		
			
				|  |  |      *status = SerializationTraits<RequestType>::Deserialize(&buf, request);
 | 
	
		
			
				|  |  |      buf.Release();
 | 
	
		
			
				|  |  |      if (status->ok()) {
 | 
	
		
			
				|  |  |        return request;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | -    delete request;
 | 
	
		
			
				|  |  | +    request->~RequestType();
 | 
	
		
			
				|  |  |      return nullptr;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -170,7 +172,7 @@ class ServerStreamingHandler : public MethodHandler {
 | 
	
		
			
				|  |  |          return func_(service_, param.server_context,
 | 
	
		
			
				|  |  |                       static_cast<RequestType*>(param.request), &writer);
 | 
	
		
			
				|  |  |        });
 | 
	
		
			
				|  |  | -      delete static_cast<RequestType*>(param.request);
 | 
	
		
			
				|  |  | +      static_cast<RequestType*>(param.request)->~RequestType();
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      CallOpSet<CallOpSendInitialMetadata, CallOpServerSendStatus> ops;
 | 
	
	
		
			
				|  | @@ -189,16 +191,18 @@ class ServerStreamingHandler : public MethodHandler {
 | 
	
		
			
				|  |  |      param.call->cq()->Pluck(&ops);
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  void* Deserialize(grpc_byte_buffer* req, Status* status) final {
 | 
	
		
			
				|  |  | +  void* Deserialize(grpc_call* call, grpc_byte_buffer* req,
 | 
	
		
			
				|  |  | +                    Status* status) final {
 | 
	
		
			
				|  |  |      ByteBuffer buf;
 | 
	
		
			
				|  |  |      buf.set_buffer(req);
 | 
	
		
			
				|  |  | -    auto* request = new RequestType();
 | 
	
		
			
				|  |  | +    auto* request = new (g_core_codegen_interface->grpc_call_arena_alloc(
 | 
	
		
			
				|  |  | +        call, sizeof(RequestType))) RequestType();
 | 
	
		
			
				|  |  |      *status = SerializationTraits<RequestType>::Deserialize(&buf, request);
 | 
	
		
			
				|  |  |      buf.Release();
 | 
	
		
			
				|  |  |      if (status->ok()) {
 | 
	
		
			
				|  |  |        return request;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | -    delete request;
 | 
	
		
			
				|  |  | +    request->~RequestType();
 | 
	
		
			
				|  |  |      return nullptr;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -323,7 +327,8 @@ class ErrorMethodHandler : public MethodHandler {
 | 
	
		
			
				|  |  |      param.call->cq()->Pluck(&ops);
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  void* Deserialize(grpc_byte_buffer* req, Status* status) final {
 | 
	
		
			
				|  |  | +  void* Deserialize(grpc_call* call, grpc_byte_buffer* req,
 | 
	
		
			
				|  |  | +                    Status* status) final {
 | 
	
		
			
				|  |  |      // We have to destroy any request payload
 | 
	
		
			
				|  |  |      if (req != nullptr) {
 | 
	
		
			
				|  |  |        g_core_codegen_interface->grpc_byte_buffer_destroy(req);
 |