From c1c173dfe503f4ad13996cefeff2efccd9d64171 Mon Sep 17 00:00:00 2001 From: Shu Xian Date: Wed, 11 Sep 2019 00:40:40 +0800 Subject: [PATCH] recover handler if panic --- server/grpc/grpc.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/server/grpc/grpc.go b/server/grpc/grpc.go index 4dcd6d73..8da88b97 100644 --- a/server/grpc/grpc.go +++ b/server/grpc/grpc.go @@ -338,6 +338,11 @@ func (g *grpcServer) processRequest(stream grpc.ServerStream, service *service, // define the handler func fn := func(ctx context.Context, req server.Request, rsp interface{}) error { + defer func() { + if r := recover(); r != nil { + log.Logf("handler %s panic recovered, err: %s", mtype.method.Name, r) + } + }() returnValues = function.Call([]reflect.Value{service.rcvr, mtype.prepareContext(ctx), reflect.ValueOf(argv.Interface()), reflect.ValueOf(rsp)}) // The return value for the method is an error.