()
| 69 | } |
| 70 | |
| 71 | func (r *BGReader) bgRead() { |
| 72 | keepReading := true |
| 73 | for keepReading { |
| 74 | buf := iobufpool.Get(8192) |
| 75 | n, err := r.r.Read(*buf) |
| 76 | *buf = (*buf)[:n] |
| 77 | |
| 78 | r.cond.L.Lock() |
| 79 | r.readResults = append(r.readResults, readResult{buf: buf, err: err}) |
| 80 | if r.status == StatusStopping || err != nil { |
| 81 | r.status = StatusStopped |
| 82 | keepReading = false |
| 83 | } |
| 84 | r.cond.L.Unlock() |
| 85 | r.cond.Broadcast() |
| 86 | } |
| 87 | } |
| 88 | |
| 89 | // Read implements the io.Reader interface. |
| 90 | func (r *BGReader) Read(p []byte) (int, error) { |