protect etcd watcher stop against race condition

This commit is contained in:
Asim Aslam 2020-08-08 00:57:57 +01:00
parent 712fe39a62
commit e7cc3c2210

View File

@ -3,6 +3,7 @@ package etcd
import (
"context"
"errors"
"sync"
"time"
"github.com/coreos/etcd/clientv3"
@ -10,10 +11,12 @@ import (
)
type etcdWatcher struct {
stop chan bool
w clientv3.WatchChan
client *clientv3.Client
timeout time.Duration
mtx sync.Mutex
stop chan bool
}
func newEtcdWatcher(r *etcdRegistry, timeout time.Duration, opts ...registry.WatchOption) (registry.Watcher, error) {
@ -90,6 +93,9 @@ func (ew *etcdWatcher) Next() (*registry.Result, error) {
}
func (ew *etcdWatcher) Stop() {
ew.mtx.Lock()
defer ew.mtx.Unlock()
select {
case <-ew.stop:
return