v.io/x/ref/services/syncbase: fix Vanadium iterator usage

Vanadium iterators requires that before dropping them on the floor, either
Cancel() be called, or Advance() must have been called and returned false.
Without this, we risk leaks of resources incorporated in the iterators.

MultiPart: 2/2
Change-Id: Id4da14526f2c08b1284593ed1758f3fa797230bd
diff --git a/services/syncbase/longevity_tests/checker/equality.go b/services/syncbase/longevity_tests/checker/equality.go
index aa31302..5fc8090 100644
--- a/services/syncbase/longevity_tests/checker/equality.go
+++ b/services/syncbase/longevity_tests/checker/equality.go
@@ -29,6 +29,7 @@
 			if err != nil {
 				return err
 			}
+			defer stream.Cancel()
 			dumpStreams = append(dumpStreams, stream)
 		}
 	}
diff --git a/services/syncbase/server/database.go b/services/syncbase/server/database.go
index ad0d89e..8211194 100644
--- a/services/syncbase/server/database.go
+++ b/services/syncbase/server/database.go
@@ -463,6 +463,7 @@
 			parts := common.SplitNKeyParts(string(keyBytes), 3)
 			id, err := pubutil.DecodeId(parts[1])
 			if err != nil {
+				it.Cancel()
 				return verror.New(verror.ErrInternal, ctx, err)
 			}
 			res = append(res, id)
@@ -686,6 +687,7 @@
 			if err := vom.Decode(valueBytes, &currValue); err != nil {
 				s.validRow = false
 				s.err = err
+				s.Cancel() // to cancel iterators after s.curr
 				return false
 			}
 			s.currValue = currValue
@@ -697,6 +699,7 @@
 		if err := s.it[s.curr].Err(); err != nil {
 			s.validRow = false
 			s.err = err
+			s.Cancel() // to cancel iterators after s.curr
 			return false
 		}
 		// We've reached the end of the iterator for this keyRange.
diff --git a/services/syncbase/store/watchable/watcher.go b/services/syncbase/store/watchable/watcher.go
index a474e8a..e00cc24 100644
--- a/services/syncbase/store/watchable/watcher.go
+++ b/services/syncbase/store/watchable/watcher.go
@@ -239,6 +239,7 @@
 	if !it.Advance() {
 		return 0, nil
 	}
+	defer it.Cancel()
 	if it.Err() != nil {
 		return 0, it.Err()
 	}