| Index: impl/memory/gkvlite_utils.go
|
| diff --git a/impl/memory/gkvlite_utils.go b/impl/memory/gkvlite_utils.go
|
| index 6c092040a1380214329790fcff2864c27bcd2059..cd96ab28e5cb1d0bb820f1a7a8ca233410563306 100644
|
| --- a/impl/memory/gkvlite_utils.go
|
| +++ b/impl/memory/gkvlite_utils.go
|
| @@ -25,7 +25,6 @@ func gkvCollide(o, n memCollection, f func(k, ov, nv []byte)) {
|
| oldItems, newItems := make(chan *gkvlite.Item), make(chan *gkvlite.Item)
|
| walker := func(c memCollection, ch chan<- *gkvlite.Item, wg *sync.WaitGroup) {
|
| defer close(ch)
|
| - defer wg.Done()
|
| if c != nil {
|
| c.VisitItemsAscend(nil, true, func(i *gkvlite.Item) bool {
|
| ch <- i
|
| @@ -35,23 +34,24 @@ func gkvCollide(o, n memCollection, f func(k, ov, nv []byte)) {
|
| }
|
|
|
| wg := &sync.WaitGroup{}
|
| - wg.Add(2)
|
| go walker(o, oldItems, wg)
|
| go walker(n, newItems, wg)
|
|
|
| l, r := <-oldItems, <-newItems
|
| for {
|
| - if l == nil && r == nil {
|
| - break
|
| - }
|
| + switch {
|
| + case l == nil && r == nil:
|
| + return
|
|
|
| - if l == nil {
|
| + case l == nil:
|
| f(r.Key, nil, r.Val)
|
| r = <-newItems
|
| - } else if r == nil {
|
| +
|
| + case r == nil:
|
| f(l.Key, l.Val, nil)
|
| l = <-oldItems
|
| - } else {
|
| +
|
| + default:
|
| switch bytes.Compare(l.Key, r.Key) {
|
| case -1: // l < r
|
| f(l.Key, l.Val, nil)
|
| @@ -65,7 +65,6 @@ func gkvCollide(o, n memCollection, f func(k, ov, nv []byte)) {
|
| }
|
| }
|
| }
|
| - wg.Wait()
|
| }
|
|
|
| // memStore is a gkvlite.Store which will panic for anything which might
|
|
|