net/http: Fix error unwrapping in transport

This commit is contained in:
Marcus Weiner 2022-10-27 11:29:31 +02:00
parent 3a41094107
commit 504efbc507
1 changed files with 7 additions and 3 deletions

View File

@ -2043,7 +2043,7 @@ func (pc *persistConn) mapRoundTripError(req *transportRequest, startBytesWritte
if pc.nwrite == startBytesWritten {
return nothingWrittenError{err}
}
return fmt.Errorf("net/http: HTTP/1.x transport connection broken: %v", err)
return fmt.Errorf("net/http: HTTP/1.x transport connection broken: %w", err)
}
return err
}
@ -2250,7 +2250,7 @@ func (pc *persistConn) readLoopPeekFailLocked(peekErr error) {
// common case.
pc.closeLocked(errServerClosedIdle)
} else {
pc.closeLocked(fmt.Errorf("readLoopPeekFailLocked: %v", peekErr))
pc.closeLocked(fmt.Errorf("readLoopPeekFailLocked: %w", peekErr))
}
}
@ -2384,6 +2384,10 @@ type nothingWrittenError struct {
error
}
func (nwe nothingWrittenError) Unwrap() error {
return nwe.error
}
func (pc *persistConn) writeLoop() {
defer close(pc.writeLoopDone)
for {
@ -2621,7 +2625,7 @@ func (pc *persistConn) roundTrip(req *transportRequest) (resp *Response, err err
req.logf("writeErrCh resv: %T/%#v", err, err)
}
if err != nil {
pc.close(fmt.Errorf("write error: %v", err))
pc.close(fmt.Errorf("write error: %w", err))
return nil, pc.mapRoundTripError(req, startBytesWritten, err)
}
if d := pc.t.ResponseHeaderTimeout; d > 0 {