func claimNextPort(s cp.Snapshot) (int, error) { for { var err error s, err = s.FastForward() if err != nil { return -1, err } f, err := s.GetFile(nextPortPath, new(cp.IntCodec)) if err == nil { port := f.Value.(int) f, err = f.Set(port + 1) if err == nil { return port, nil } time.Sleep(time.Second / 10) } else { return -1, err } } }