@@ -101,28 +101,34 @@ func (c *Client) do(req *http.Request, seeker io.Seeker) (io.ReadCloser, int64,
101101 error_retry_time := 0.5
102102request_loop:
103103 for error_retry_time < 300 {
104+ if res != nil && err == nil {
105+ // be sure to close the response before retrying
106+ ioutil .ReadAll (res .Body )
107+ res .Body .Close ()
108+ }
104109 res , err = c .HTTPClient .Do (req )
105- if err != nil {
110+ if err != nil {
106111 log .Printf ("[DROPBOX_RETRY] %v; retrying after %.2f seconds" , err , error_retry_time )
107112 time .Sleep (time .Duration (error_retry_time ) * time .Second )
108113 error_retry_time *= 1.5
109114 if seeker != nil {
110115 seeker .Seek (0 , io .SeekStart )
111116 }
112117 continue
113- }
118+ }
119+
114120 switch {
115121 case res .StatusCode == 429 :
116- log .Printf ("[DROPBOX_RETRY] %s %s returned %d; retrying after %.2f seconds" , req .Method , req .URL , res .StatusCode , error_retry_time )
117122 sleep_time , conv_e := strconv .Atoi (res .Header .Get ("Retry-After" ))
118123 if conv_e != nil {
119124 sleep_time = 60
120125 }
126+ log .Printf ("[DROPBOX_RETRY] %s %s returned %d; retrying after %d seconds" , req .Method , req .URL , res .StatusCode , sleep_time )
121127 time .Sleep (time .Duration (sleep_time ) * time .Second )
122128 if seeker != nil {
123129 seeker .Seek (0 , io .SeekStart )
124130 }
125- case res .StatusCode == 401 :
131+ case res .StatusCode == 401 :
126132 log .Printf ("[DROPBOX_RETRY] %s %s returned %d; refreshing access token" , req .Method , req .URL , res .StatusCode )
127133 err = c .refreshToken ()
128134 req .Header .Set ("Authorization" , "Bearer " + c .AccessToken )
0 commit comments