diff options
| author | Louis Bettens <louis@bettens.info> | 2013-08-24 23:51:28 +0400 |
|---|---|---|
| committer | Louis Bettens <louis@bettens.info> | 2013-08-24 23:51:28 +0400 |
| commit | bf5235eda6b42a0a82d480e7ea2056553a2a3017 (patch) | |
| tree | b94ca54aecd77414d822465a0647812611c2fc31 /p/haskell-network-multicast | |
| parent | 9d789ca39edc47957eddae499cbfee3d9929051e (diff) | |
| download | DHG_packages-bf5235eda6b42a0a82d480e7ea2056553a2a3017.tar.gz | |
haskell-network-multicast: fix multicastReceiver socket leak when unable to set up socket
Diffstat (limited to 'p/haskell-network-multicast')
| -rw-r--r-- | p/haskell-network-multicast/debian/changelog | 8 | ||||
| -rw-r--r-- | p/haskell-network-multicast/debian/patches/fix-multicastReceiver-socket-leak-when-unable-to-set-up-socket.diff | 49 |
2 files changed, 57 insertions, 0 deletions
diff --git a/p/haskell-network-multicast/debian/changelog b/p/haskell-network-multicast/debian/changelog index f4e294a2c..c2de9a8e2 100644 --- a/p/haskell-network-multicast/debian/changelog +++ b/p/haskell-network-multicast/debian/changelog @@ -1,3 +1,11 @@ +haskell-network-multicast (0.0.7-2.1) UNRELEASED; urgency=low + + * Non-maintainer upload. + * Fix multicastReceiver socket leak when unable to set up socket. + * Closes: #720714, fixed and reported upstream by Joey Hess. + + -- Louis Bettens <louis@bettens.info> Sat, 24 Aug 2013 21:18:34 +0200 + haskell-network-multicast (0.0.7-2) unstable; urgency=low * Enable compat level 9 diff --git a/p/haskell-network-multicast/debian/patches/fix-multicastReceiver-socket-leak-when-unable-to-set-up-socket.diff b/p/haskell-network-multicast/debian/patches/fix-multicastReceiver-socket-leak-when-unable-to-set-up-socket.diff new file mode 100644 index 000000000..e685ee5d0 --- /dev/null +++ b/p/haskell-network-multicast/debian/patches/fix-multicastReceiver-socket-leak-when-unable-to-set-up-socket.diff @@ -0,0 +1,49 @@ +From: Joey Hess <joeyh@debian.org> +Subject: fix multicastReceiver socket leak when unable to set up socket + +Origin: upstream, https://github.com/audreyt/network-multicast/commit/0fae21bd7584dc80190c523e165c1b83a17da238 +diff --git a/src/Network/Multicast.hsc b/src/Network/Multicast.hsc +index 5a87ed8..6876aab 100644 +--- a/src/Network/Multicast.hsc ++++ b/src/Network/Multicast.hsc +@@ -30,6 +30,7 @@ import Foreign.C.Error + import Foreign.Storable + import Foreign.Marshal + import Foreign.Ptr ++import Control.Exception (bracketOnError) + + type TimeToLive = Int + type LoopbackMode = Bool +@@ -72,18 +73,22 @@ multicastSender host port = do + -- > print (msg, addr) in loop + -- + multicastReceiver :: HostName -> PortNumber -> IO Socket +-multicastReceiver host port = do +- proto <- getProtocolNumber "udp" +- sock <- socket AF_INET Datagram proto +-#ifdef SO_REUSEPORT +- setSocketOption sock ReusePort 1 ++multicastReceiver host port = bracketOnError get close setup ++ where ++ get = do ++ proto <- getProtocolNumber "udp" ++ sock <- socket AF_INET Datagram proto ++#if defined(SO_REUSEPORT) && ! defined (__linux__) ++ setSocketOption sock ReusePort 1 + #else +- setSocketOption sock ReuseAddr 1 ++ setSocketOption sock ReuseAddr 1 ++ return sock + #endif +- (addrInfo:_) <- getAddrInfo Nothing (Just host) (Just $ show port) +- bindSocket sock $ addrAddress addrInfo +- addMembership sock host +- return sock ++ setup sock = do ++ (addrInfo:_) <- getAddrInfo Nothing (Just host) (Just $ show port) ++ bindSocket sock $ addrAddress addrInfo ++ addMembership sock host ++ return sock + + doSetSocketOption :: Storable a => CInt -> Socket -> a -> IO CInt + doSetSocketOption ip_multicast_option (MkSocket s _ _ _ _) x = alloca $ \ptr -> do |
