Merge pull request #3618 from hashicorp/b-lazy-freeport

Initialize freeport lazily to avoid runtime issues
This commit is contained in:
James Phillips 2017-10-25 15:34:43 -07:00 committed by GitHub
commit 17213f6e8f
1 changed files with 9 additions and 1 deletions

View File

@ -40,11 +40,16 @@ var (
// mu guards nextPort
mu sync.Mutex
// once is used to do the initialization on the first call to retrieve free
// ports
once sync.Once
// port is the last allocated port.
port int
)
func init() {
// initialize is used to initialize freeport.
func initialize() {
if lowPort+maxBlocks*blockSize > 65535 {
panic("freeport: block size too big or too many blocks requested")
}
@ -108,6 +113,9 @@ func Free(n int) (ports []int, err error) {
return nil, fmt.Errorf("freeport: block size too small")
}
// Reserve a port block
once.Do(initialize)
for len(ports) < n {
port++