Browse Source

Merge pull request #10058 from vimalk78/9882-contrib-queue-memleak

contrib/recipes/watch.go : cancel() the watch after desired watch event
Xiang Li 7 years ago
parent
commit
ca7dc4ff26
1 changed files with 6 additions and 2 deletions
  1. 6 2
      contrib/recipes/watch.go

+ 6 - 2
contrib/recipes/watch.go

@@ -23,7 +23,9 @@ import (
 
 // WaitEvents waits on a key until it observes the given events and returns the final one.
 func WaitEvents(c *clientv3.Client, key string, rev int64, evs []mvccpb.Event_EventType) (*clientv3.Event, error) {
-	wc := c.Watch(context.Background(), key, clientv3.WithRev(rev))
+	ctx, cancel := context.WithCancel(context.Background())
+	defer cancel()
+	wc := c.Watch(ctx, key, clientv3.WithRev(rev))
 	if wc == nil {
 		return nil, ErrNoWatcher
 	}
@@ -31,7 +33,9 @@ func WaitEvents(c *clientv3.Client, key string, rev int64, evs []mvccpb.Event_Ev
 }
 
 func WaitPrefixEvents(c *clientv3.Client, prefix string, rev int64, evs []mvccpb.Event_EventType) (*clientv3.Event, error) {
-	wc := c.Watch(context.Background(), prefix, clientv3.WithPrefix(), clientv3.WithRev(rev))
+	ctx, cancel := context.WithCancel(context.Background())
+	defer cancel()
+	wc := c.Watch(ctx, prefix, clientv3.WithPrefix(), clientv3.WithRev(rev))
 	if wc == nil {
 		return nil, ErrNoWatcher
 	}