inhibit stream close on request
This commit is contained in:
		
							parent
							
								
									3f8721cd4b
								
							
						
					
					
						commit
						b51247bb2c
					
				| @ -14,6 +14,10 @@ func (c *Client) req(method, path string, body io.Reader, intercept func(*http.R | |||||||
| 	var retryBuf io.Reader | 	var retryBuf io.Reader | ||||||
| 
 | 
 | ||||||
| 	if body != nil { | 	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. | ||||||
|  | 		body = closeInhibitor{body} | ||||||
| 		// If the authorization fails, we will need to restart reading | 		// If the authorization fails, we will need to restart reading | ||||||
| 		// from the passed body stream. | 		// from the passed body stream. | ||||||
| 		// When body is seekable, use seek to reset the streams | 		// 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 { | func (l *limitedReadCloser) Close() error { | ||||||
| 	return l.rc.Close() | 	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