Source file src/runtime/retry.go

     1  // Copyright 2022 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  //go:build unix
     6  
     7  package runtime
     8  
     9  // retryOnEAGAIN retries a function until it does not return EAGAIN.
    10  // It will use an increasing delay between calls, and retry up to 20 times.
    11  // The function argument is expected to return an errno value,
    12  // and retryOnEAGAIN will return any errno value other than EAGAIN.
    13  // If all retries return EAGAIN, then retryOnEAGAIN will return EAGAIN.
    14  func retryOnEAGAIN(fn func() int32) int32 {
    15  	for tries := 0; tries < 20; tries++ {
    16  		errno := fn()
    17  		if errno != _EAGAIN {
    18  			return errno
    19  		}
    20  		usleep_no_g(uint32(tries+1) * 1000) // milliseconds
    21  	}
    22  	return _EAGAIN
    23  }
    24  

View as plain text