From 7ff60df7da4e777d481e3bb28a6bd44604c3177d Mon Sep 17 00:00:00 2001 From: Qishuai Liu Date: Wed, 22 Jan 2025 03:28:09 +0900 Subject: [PATCH] server: fix buffer release timing in processUnaryRPC (#7998) --- server.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/server.go b/server.go index 16065a027ae8..9d5b2884d14e 100644 --- a/server.go +++ b/server.go @@ -1360,8 +1360,16 @@ func (s *Server) processUnaryRPC(ctx context.Context, stream *transport.ServerSt } return err } - defer d.Free() + freed := false + dataFree := func() { + if !freed { + d.Free() + freed = true + } + } + defer dataFree() df := func(v any) error { + defer dataFree() if err := s.getCodec(stream.ContentSubtype()).Unmarshal(d, v); err != nil { return status.Errorf(codes.Internal, "grpc: error unmarshalling request: %v", err) }