diff --git a/internal/upnp/upnp.go b/internal/upnp/upnp.go index 731738468..5784423ae 100644 --- a/internal/upnp/upnp.go +++ b/internal/upnp/upnp.go @@ -103,32 +103,8 @@ func Discover(timeout time.Duration) []IGD { resultChan := make(chan IGD) - // Aggregator - go func() { - next: - for result := range resultChan { - for _, existingResult := range results { - if existingResult.uuid == result.uuid { - if debug { - l.Debugf("Skipping duplicate result %s with services:", result.uuid) - for _, svc := range result.services { - l.Debugf("* [%s] %s", svc.serviceID, svc.serviceURL) - } - } - goto next - } - } - results = append(results, result) - if debug { - l.Debugf("UPnP discovery result %s with services:", result.uuid) - for _, svc := range result.services { - l.Debugf("* [%s] %s", svc.serviceID, svc.serviceURL) - } - } - } - }() - wg := sync.NewWaitGroup() + for _, intf := range interfaces { // Interface flags seem to always be 0 on Windows if runtime.GOOS != "windows" && (intf.Flags&net.FlagUp == 0 || intf.Flags&net.FlagMulticast == 0) { @@ -144,8 +120,33 @@ func Discover(timeout time.Duration) []IGD { } } - wg.Wait() - close(resultChan) + go func() { + wg.Wait() + close(resultChan) + }() + +nextResult: + for result := range resultChan { + for _, existingResult := range results { + if existingResult.uuid == result.uuid { + if debug { + l.Debugf("Skipping duplicate result %s with services:", result.uuid) + for _, svc := range result.services { + l.Debugf("* [%s] %s", svc.serviceID, svc.serviceURL) + } + } + continue nextResult + } + } + + results = append(results, result) + if debug { + l.Debugf("UPnP discovery result %s with services:", result.uuid) + for _, svc := range result.services { + l.Debugf("* [%s] %s", svc.serviceID, svc.serviceURL) + } + } + } return results }