@@ -157,7 +157,7 @@ func DialWithSplitRetry(d *protect.RDial, laddr, raddr *net.TCPAddr) (*retrier,
157157 r .mu .Lock ()
158158 defer r .mu .Unlock ()
159159
160- if _ , err := r .dialLocked (); err != nil {
160+ if err := r .dialLocked (); err != nil {
161161 return nil , err
162162 }
163163 return r , nil
@@ -204,7 +204,7 @@ func DialAny(ds []protect.RDialer, laddr, raddr net.Addr) (*retrier, error) {
204204 r .mu .Lock ()
205205 defer r .mu .Unlock ()
206206
207- if _ , err := r .dialLocked (); err != nil {
207+ if err := r .dialLocked (); err != nil {
208208 return nil , err
209209 }
210210 return r , nil
@@ -300,16 +300,16 @@ func (r *retrier) dialerID() string {
300300
301301// dialLocked establishes a new connection to r.raddr and closes existing, if any.
302302// Sets r.conn on non-errors and timeout as calculated from round-trip time.
303- func (r * retrier ) dialLocked () ( c protect. Conn , err error ) {
303+ func (r * retrier ) dialLocked () error {
304304 clos (r .conn ) // close existing connection, if any
305305
306306 strat , err := r .dialStratLocked ()
307307 if err != nil {
308- return
308+ return err
309309 }
310310
311311 begin := time .Now ()
312- c , err = r .doDialLocked (strat )
312+ c , err : = r .doDialLocked (strat )
313313 rtt := time .Since (begin )
314314
315315 r .conn = c // c may be nil
@@ -318,7 +318,7 @@ func (r *retrier) dialLocked() (c protect.Conn, err error) {
318318 logeif (err )("retrier: dial(%s) %s=>%s; strat: %d (mult? %d %T), rtt: %dms; err? %v" ,
319319 r .dialerID (), laddr (c ), r .raddr , strat , len (r .dialers ), c , rtt .Milliseconds (), err )
320320
321- return
321+ return err
322322}
323323
324324// dialStrat returns a core.DuplexConn to r.raddr using a specified strategy, strat,
@@ -378,7 +378,8 @@ func (r *retrier) doDialLocked(dialStrat int32) (protect.Conn, error) {
378378// Returns an error if the dial fails or if the splits could not be written.
379379func (r * retrier ) retryWriteReadLocked (buf []byte ) (int , error ) {
380380 // r.dialLocked also closes provisional socket
381- newConn , err := r .dialLocked () // errs on dial strat = no retries, too
381+ err := r .dialLocked () // errs on dial strat = no retries, too
382+ newConn := r .conn
382383 if err != nil || newConn == nil || core .IsNil (newConn ) {
383384 return 0 , core .OneErr (err , errNoConn )
384385 }
@@ -456,6 +457,7 @@ func (r *retrier) Read(buf []byte) (n int, err error) {
456457 // retry on errs like timeouts or connection resets
457458 for (c == nil || core .IsNil (c ) || retryReadErr != nil ) && r .canRetryLocked () {
458459 r .retryCount ++
460+
459461 n , retryReadErr = r .retryWriteReadLocked (buf )
460462 c = r .conn // re-assign c to newConn, if any; may be nil
461463 if c == nil || core .IsNil (c ) || retryReadErr != nil {
@@ -592,7 +594,8 @@ func (r *retrier) Write(b []byte) (int, error) {
592594
593595 // retryCompleted() is true, so r.conn is final and doesn't need locking
594596 if c := r .conn ; c == nil || core .IsNil (c ) {
595- log .E ("retrier: write: %s: [] => %s (b: %d, tee: %d), not retrying, but no conn" , r .dialerID (), r .raddr , len (b ), len (r .tee ))
597+ log .E ("retrier: write: %s: [] => %s (b: %d, tee: %d), not retrying, but no conn" ,
598+ r .dialerID (), r .raddr , len (b ), len (r .tee ))
596599 return 0 , errNilConn
597600 } else {
598601 return c .Write (b )
0 commit comments