diff --git a/osdep/PortMapper.cpp b/osdep/PortMapper.cpp index 6418464db..0027ed69c 100644 --- a/osdep/PortMapper.cpp +++ b/osdep/PortMapper.cpp @@ -207,7 +207,8 @@ public: memset(&data,0,sizeof(data)); OSUtils::ztsnprintf(inport,sizeof(inport),"%d",localPort); - if ((UPNP_GetValidIGD(devlist,&urls,&data,lanaddr,sizeof(lanaddr)))&&(lanaddr[0])) { + int foundValidIGD = 0; + if ((foundValidIGD = UPNP_GetValidIGD(devlist,&urls,&data,lanaddr,sizeof(lanaddr)))&&(lanaddr[0])) { #ifdef ZT_PORTMAPPER_TRACE PM_TRACE("PortMapper: UPnP: my LAN IP address: %s" ZT_EOL_S,lanaddr); #endif @@ -282,9 +283,11 @@ public: PM_TRACE("PortMapper: UPnP: UPNP_GetValidIGD failed, returning to NAT-PMP mode" ZT_EOL_S); #endif } - freeUPNPDevlist(devlist); + if(foundValidIGD) { + FreeUPNPUrls(&urls); + } } else { mode = 0; #ifdef ZT_PORTMAPPER_TRACE