From 32bc8658793b278c793cb8755b94df3b210bea5d Mon Sep 17 00:00:00 2001 From: Johannes 'fish' Ziemke Date: Fri, 18 Jul 2014 16:57:32 +0200 Subject: [PATCH] Make sure err never gets masked Defining err as named return parameter will make sure the variable gets assigned before returning and thus avoid masking Docker-DCO-1.1-Signed-off-by: Johannes 'fish' Ziemke (github: discordianfish) --- daemon/networkdriver/portmapper/mapper.go | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/daemon/networkdriver/portmapper/mapper.go b/daemon/networkdriver/portmapper/mapper.go index 1bd332271f..b78e7180f5 100644 --- a/daemon/networkdriver/portmapper/mapper.go +++ b/daemon/networkdriver/portmapper/mapper.go @@ -37,24 +37,16 @@ func SetIptablesChain(c *iptables.Chain) { chain = c } -func Map(container net.Addr, hostIP net.IP, hostPort int) (net.Addr, error) { +func Map(container net.Addr, hostIP net.IP, hostPort int) (host net.Addr, err error) { lock.Lock() defer lock.Unlock() var ( m *mapping - err error proto string allocatedHostPort int ) - // release the port on any error during return. - defer func() { - if err != nil { - portallocator.ReleasePort(hostIP, proto, allocatedHostPort) - } - }() - switch container.(type) { case *net.TCPAddr: proto = "tcp" @@ -77,14 +69,19 @@ func Map(container net.Addr, hostIP net.IP, hostPort int) (net.Addr, error) { container: container, } default: - err = ErrUnknownBackendAddressType - return nil, err + return nil, ErrUnknownBackendAddressType } + // release the allocated port on any further error during return. + defer func() { + if err != nil { + portallocator.ReleasePort(hostIP, proto, allocatedHostPort) + } + }() + key := getKey(m.host) if _, exists := currentMappings[key]; exists { - err = ErrPortMappedForIP - return nil, err + return nil, ErrPortMappedForIP } containerIP, containerPort := getIPAndPort(m.container)