code: func (p *GRPCProvider) getSchema() providers.GetSchemaResponse {
  	p.mu.Lock()
  	// unlock inline in case GetSchema needs to be called
  	if p.schemas.Provider.Block != nil {
  		p.mu.Unlock()
  		return p.schemas
  	}
  	p.mu.Unlock()
  
  	// the schema should have been fetched already, but give it another shot
  	// just in case things are being called out of order. This may happen for
  	// tests.
  	schemas := p.GetSchema()
  	if schemas.Diagnostics.HasErrors() {
  		panic(schemas.Diagnostics.Err())
  	}
  
  	return schemas
  }
docs: // getSchema is used internally to get the saved provider schema.  The schema
  // should have already been fetched from the provider, but we have to
  // synchronize access to avoid being called concurrently with GetSchema.