diff --git a/server.go b/server.go index c25189aeae36..b54f5bb572a7 100644 --- a/server.go +++ b/server.go @@ -1430,15 +1430,16 @@ func (s *Server) processStreamingRPC(t transport.ServerTransport, stream *transp if channelz.IsOn() { s.incrCallsStarted() } + shs := s.opts.statsHandlers var statsBegin *stats.Begin - if len(s.opts.statsHandlers) != 0 { + if len(shs) != 0 { beginTime := time.Now() statsBegin = &stats.Begin{ BeginTime: beginTime, IsClientStream: sd.ClientStreams, IsServerStream: sd.ServerStreams, } - for _, sh := range s.opts.statsHandlers { + for _, sh := range shs { sh.HandleRPC(stream.Context(), statsBegin) } } @@ -1452,10 +1453,10 @@ func (s *Server) processStreamingRPC(t transport.ServerTransport, stream *transp maxReceiveMessageSize: s.opts.maxReceiveMessageSize, maxSendMessageSize: s.opts.maxSendMessageSize, trInfo: trInfo, - statsHandler: s.opts.statsHandlers, + statsHandler: shs, } - if len(s.opts.statsHandlers) != 0 || trInfo != nil || channelz.IsOn() { + if len(shs) != 0 || trInfo != nil || channelz.IsOn() { // See comment in processUnaryRPC on defers. defer func() { if trInfo != nil { @@ -1469,7 +1470,7 @@ func (s *Server) processStreamingRPC(t transport.ServerTransport, stream *transp ss.mu.Unlock() } - if len(s.opts.statsHandlers) != 0 { + if len(shs) != 0 { end := &stats.End{ BeginTime: statsBegin.BeginTime, EndTime: time.Now(), @@ -1477,7 +1478,7 @@ func (s *Server) processStreamingRPC(t transport.ServerTransport, stream *transp if err != nil && err != io.EOF { end.Error = toRPCErr(err) } - for _, sh := range s.opts.statsHandlers { + for _, sh := range shs { sh.HandleRPC(stream.Context(), end) } }