readBackgroundResults reads a result previously read by the background reader. r.cond.L must be held.
(p []byte)
| 109 | |
| 110 | // readBackgroundResults reads a result previously read by the background reader. r.cond.L must be held. |
| 111 | func (r *BGReader) readFromReadResults(p []byte) (int, error) { |
| 112 | buf := r.readResults[0].buf |
| 113 | var err error |
| 114 | |
| 115 | n := copy(p, *buf) |
| 116 | if n == len(*buf) { |
| 117 | err = r.readResults[0].err |
| 118 | iobufpool.Put(buf) |
| 119 | if len(r.readResults) == 1 { |
| 120 | r.readResults = nil |
| 121 | } else { |
| 122 | r.readResults = r.readResults[1:] |
| 123 | } |
| 124 | } else { |
| 125 | *buf = (*buf)[n:] |
| 126 | r.readResults[0].buf = buf |
| 127 | } |
| 128 | |
| 129 | return n, err |
| 130 | } |
| 131 | |
| 132 | func New(r io.Reader) *BGReader { |
| 133 | return &BGReader{ |