(dst *error, err error, fn func())
| 120 | func (p *pipe) closeWithErrorAndCode(err error, fn func()) { p.closeWithError(&p.err, err, fn) } |
| 121 | |
| 122 | func (p *pipe) closeWithError(dst *error, err error, fn func()) { |
| 123 | if err == nil { |
| 124 | panic("err must be non-nil") |
| 125 | } |
| 126 | p.mu.Lock() |
| 127 | defer p.mu.Unlock() |
| 128 | if p.c.L == nil { |
| 129 | p.c.L = &p.mu |
| 130 | } |
| 131 | defer p.c.Signal() |
| 132 | if *dst != nil { |
| 133 | // Already been done. |
| 134 | return |
| 135 | } |
| 136 | p.readFn = fn |
| 137 | if dst == &p.breakErr { |
| 138 | if p.b != nil { |
| 139 | p.unread += p.b.Len() |
| 140 | } |
| 141 | p.b = nil |
| 142 | } |
| 143 | *dst = err |
| 144 | p.closeDoneLocked() |
| 145 | } |
| 146 | |
| 147 | // requires p.mu be held. |
| 148 | func (p *pipe) closeDoneLocked() { |
no test coverage detected