diff --git a/lib/upnp/upnp.go b/lib/upnp/upnp.go index 38504fd3..4f4b50f9 100644 --- a/lib/upnp/upnp.go +++ b/lib/upnp/upnp.go @@ -108,19 +108,21 @@ func Discover(renewal, timeout time.Duration) []nat.Device { close(resultChan) }() + seenResults := make(map[string]bool) nextResult: for result := range resultChan { - for _, existingResult := range results { - if existingResult.ID() == result.ID() { - l.Debugf("Skipping duplicate result %s with services:", result.uuid) - for _, service := range result.services { - l.Debugf("* [%s] %s", service.ID, service.URL) - } - continue nextResult + if seenResults[result.ID()] { + l.Debugf("Skipping duplicate result %s with services:", result.uuid) + for _, service := range result.services { + l.Debugf("* [%s] %s", service.ID, service.URL) } + continue nextResult } + result := result // Reallocate as we need to keep a pointer results = append(results, &result) + seenResults[result.ID()] = true + l.Debugf("UPnP discovery result %s with services:", result.uuid) for _, service := range result.services { l.Debugf("* [%s] %s", service.ID, service.URL)