|
@@ -107,7 +107,7 @@ func (p *pager[T]) iteratePages() <-chan Page[T] {
|
|
defer close(ch)
|
|
defer close(ch)
|
|
var page Page[T]
|
|
var page Page[T]
|
|
for {
|
|
for {
|
|
- if p.ctx.Err() != nil {
|
|
|
|
|
|
+ if p.pctx.Err() != nil {
|
|
break
|
|
break
|
|
}
|
|
}
|
|
page = <-p.pagePool
|
|
page = <-p.pagePool
|
|
@@ -120,6 +120,12 @@ func (p *pager[T]) iteratePages() <-chan Page[T] {
|
|
if p.cnt == 0 {
|
|
if p.cnt == 0 {
|
|
p.cnt = page.Count()
|
|
p.cnt = page.Count()
|
|
}
|
|
}
|
|
|
|
+ // When page.Count() is zero, we must rely on the
|
|
|
|
+ // absence of returned results to know when to stop.
|
|
|
|
+ if p.cnt == 0 && len(page.Elems()) == 0 {
|
|
|
|
+ p.pagePool <- page
|
|
|
|
+ return
|
|
|
|
+ }
|
|
ch <- page
|
|
ch <- page
|
|
|
|
|
|
if (p.m*p.n + p.n) >= p.cnt {
|
|
if (p.m*p.n + p.n) >= p.cnt {
|
|
@@ -137,7 +143,7 @@ func (p *pager[T]) IterPages() <-chan Page[T] {
|
|
defer close(p.done)
|
|
defer close(p.done)
|
|
defer close(ch)
|
|
defer close(ch)
|
|
for page := range p.iteratePages() {
|
|
for page := range p.iteratePages() {
|
|
- if p.ctx.Err() != nil {
|
|
|
|
|
|
+ if p.pctx.Err() != nil {
|
|
p.pagePool <- page
|
|
p.pagePool <- page
|
|
break
|
|
break
|
|
}
|
|
}
|
|
@@ -158,7 +164,7 @@ func (p *pager[T]) Iter() <-chan T {
|
|
defer close(p.done)
|
|
defer close(p.done)
|
|
defer close(ch)
|
|
defer close(ch)
|
|
for page := range p.iteratePages() {
|
|
for page := range p.iteratePages() {
|
|
- if p.ctx.Err() != nil {
|
|
|
|
|
|
+ if p.pctx.Err() != nil {
|
|
p.pagePool <- page
|
|
p.pagePool <- page
|
|
break
|
|
break
|
|
}
|
|
}
|