code: func (s *receiveStream) Read(p []byte) (int, error) {
  	s.mutex.Lock()
  	completed, n, err := s.readImpl(p)
  	s.mutex.Unlock()
  
  	if completed {
  		s.streamCompleted()
  	}
  	return n, err
  }
docs: // Read implements io.Reader. It is not thread safe!