Compare commits
	
		
			4 Commits
		
	
	
		
			master
			...
			dev-bodycl
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 0d8627db50 | ||
|  | c42caf78a2 | ||
|  | 341db84788 | ||
|  | b51247bb2c | 
| @ -14,6 +14,15 @@ func (c *Client) req(method, path string, body io.Reader, intercept func(*http.R | ||||
| 	var retryBuf io.Reader | ||||
| 
 | ||||
| 	if body != nil { | ||||
| 		// Because Request#Do closes closable streams, Seeker#Seek | ||||
| 		// will fail on retry because stream is already  closed. | ||||
| 		// This inhibits the closing of the passed stream on passing | ||||
| 		// it to the RoundTripper and closes the stream after we | ||||
| 		// are done with the body content. | ||||
| 		if cl, ok := body.(io.Closer); ok { | ||||
| 			body = closeInhibitor{body} | ||||
| 			defer cl.Close() | ||||
| 		} | ||||
| 		// If the authorization fails, we will need to restart reading | ||||
| 		// from the passed body stream. | ||||
| 		// When body is seekable, use seek to reset the streams | ||||
|  | ||||
							
								
								
									
										11
									
								
								utils.go
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								utils.go
									
									
									
									
									
								
							| @ -133,3 +133,14 @@ func (l *limitedReadCloser) Read(buf []byte) (int, error) { | ||||
| func (l *limitedReadCloser) Close() error { | ||||
| 	return l.rc.Close() | ||||
| } | ||||
| 
 | ||||
| // closeInhibitor implements io.Closer and | ||||
| // wraps a Reader. When Close() is performed | ||||
| // on it, it will simply be silently rejected. | ||||
| type closeInhibitor struct { | ||||
| 	io.Reader | ||||
| } | ||||
| 
 | ||||
| func (ci closeInhibitor) Close() error { | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user