summaryrefslogtreecommitdiff
path: root/vendor/google.golang.org/grpc/resolver/manual/manual.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/google.golang.org/grpc/resolver/manual/manual.go')
-rw-r--r--vendor/google.golang.org/grpc/resolver/manual/manual.go11
1 files changed, 10 insertions, 1 deletions
diff --git a/vendor/google.golang.org/grpc/resolver/manual/manual.go b/vendor/google.golang.org/grpc/resolver/manual/manual.go
index f6e7b5ae3..f27978e12 100644
--- a/vendor/google.golang.org/grpc/resolver/manual/manual.go
+++ b/vendor/google.golang.org/grpc/resolver/manual/manual.go
@@ -21,6 +21,8 @@
package manual
import (
+ "sync"
+
"google.golang.org/grpc/resolver"
)
@@ -50,6 +52,7 @@ type Resolver struct {
scheme string
// Fields actually belong to the resolver.
+ mu sync.Mutex // Guards access to CC.
CC resolver.ClientConn
bootstrapState *resolver.State
}
@@ -62,8 +65,10 @@ func (r *Resolver) InitialState(s resolver.State) {
// Build returns itself for Resolver, because it's both a builder and a resolver.
func (r *Resolver) Build(target resolver.Target, cc resolver.ClientConn, opts resolver.BuildOptions) (resolver.Resolver, error) {
- r.BuildCallback(target, cc, opts)
+ r.mu.Lock()
r.CC = cc
+ r.mu.Unlock()
+ r.BuildCallback(target, cc, opts)
if r.bootstrapState != nil {
r.UpdateState(*r.bootstrapState)
}
@@ -87,10 +92,14 @@ func (r *Resolver) Close() {
// UpdateState calls CC.UpdateState.
func (r *Resolver) UpdateState(s resolver.State) {
+ r.mu.Lock()
r.CC.UpdateState(s)
+ r.mu.Unlock()
}
// ReportError calls CC.ReportError.
func (r *Resolver) ReportError(err error) {
+ r.mu.Lock()
r.CC.ReportError(err)
+ r.mu.Unlock()
}