connection.go | 6 +++--- misc_test.go | 3 ++- diff --git a/connection.go b/connection.go index b68bed7f6f61dd05e958a0c212f9160d4a7ad0dc..09b09a64d4a69460b9ee590786515297e7d73c40 100644 --- a/connection.go +++ b/connection.go @@ -608,13 +608,13 @@ // Emits the indices in the Bitmaps bms in order, never repeating any index. // skip is mutated during execution, and its initial values will never be // emitted. -func iterBitmapsDistinct(skip bitmap.Bitmap, bms ...bitmap.Bitmap) iter.Func { +func iterBitmapsDistinct(skip *bitmap.Bitmap, bms ...bitmap.Bitmap) iter.Func { return func(cb iter.Callback) { for _, bm := range bms { if !iter.All(func(i interface{}) bool { skip.Add(i.(int)) return cb(i) - }, bitmap.Sub(bm, skip).Iter) { + }, bitmap.Sub(bm, *skip).Iter) { return } } @@ -633,7 +633,7 @@ skip.Union(cn.t.completedPieces) // Return an iterator over the different priority classes, minus the skip // pieces. return iter.Chain( - iterBitmapsDistinct(skip, now, readahead), + iterBitmapsDistinct(&skip, now, readahead), func(cb iter.Callback) { cn.t.pendingPieces.IterTyped(func(piece int) bool { if skip.Contains(piece) { diff --git a/misc_test.go b/misc_test.go index 8bb23c35365dfe20e19446b695e67f951e4d4cae..32e60fa956319a9b1b414a9f411e8ff63e0758d0 100644 --- a/misc_test.go +++ b/misc_test.go @@ -25,6 +25,7 @@ var skip, first, second bitmap.Bitmap skip.Add(1) first.Add(1, 0, 3) second.Add(1, 2, 0) - assert.Equal(t, []interface{}{0, 3, 2}, iter.ToSlice(iterBitmapsDistinct(skip.Copy(), first, second))) + skipCopy := skip.Copy() + assert.Equal(t, []interface{}{0, 3, 2}, iter.ToSlice(iterBitmapsDistinct(&skipCopy, first, second))) assert.Equal(t, []int{1}, skip.ToSortedSlice()) }