瀏覽代碼

Serialize embedded resolver Start and Stop

Signed-off-by: Santhosh Manohar <santhosh@docker.com>
Santhosh Manohar 8 年之前
父節點
當前提交
94845a80f7
共有 1 個文件被更改,包括 8 次插入0 次删除
  1. 8 0
      libnetwork/resolver.go

+ 8 - 0
libnetwork/resolver.go

@@ -87,6 +87,7 @@ type resolver struct {
 	listenAddress string
 	listenAddress string
 	proxyDNS      bool
 	proxyDNS      bool
 	resolverKey   string
 	resolverKey   string
+	startCh       chan struct{}
 }
 }
 
 
 func init() {
 func init() {
@@ -101,6 +102,7 @@ func NewResolver(address string, proxyDNS bool, resolverKey string, backend DNSB
 		listenAddress: address,
 		listenAddress: address,
 		resolverKey:   resolverKey,
 		resolverKey:   resolverKey,
 		err:           fmt.Errorf("setup not done yet"),
 		err:           fmt.Errorf("setup not done yet"),
+		startCh:       make(chan struct{}, 1),
 	}
 	}
 }
 }
 
 
@@ -136,6 +138,9 @@ func (r *resolver) SetupFunc(port int) func() {
 }
 }
 
 
 func (r *resolver) Start() error {
 func (r *resolver) Start() error {
+	r.startCh <- struct{}{}
+	defer func() { <-r.startCh }()
+
 	// make sure the resolver has been setup before starting
 	// make sure the resolver has been setup before starting
 	if r.err != nil {
 	if r.err != nil {
 		return r.err
 		return r.err
@@ -160,6 +165,9 @@ func (r *resolver) Start() error {
 }
 }
 
 
 func (r *resolver) Stop() {
 func (r *resolver) Stop() {
+	r.startCh <- struct{}{}
+	defer func() { <-r.startCh }()
+
 	if r.server != nil {
 	if r.server != nil {
 		r.server.Shutdown()
 		r.server.Shutdown()
 	}
 	}