Skip to content

Commit 77ee187

Browse files
committed
removing race approach from gracefulClose due to CLOSE_WAIT (#438)
1 parent f8c401c commit 77ee187

File tree

1 file changed

+0
-36
lines changed

1 file changed

+0
-36
lines changed

Network/Socket/Shutdown.hs

Lines changed: 0 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -63,14 +63,7 @@ gracefulClose s tmout = sendRecvFIN `E.finally` close s
6363
shutdown s ShutdownSend
6464
-- Waiting TCP FIN.
6565
E.bracket (mallocBytes bufSize) free $ \buf -> do
66-
#if defined(mingw32_HOST_OS)
6766
{-# SCC "" #-} recvEOFloop buf
68-
#else
69-
mevmgr <- Ev.getSystemEventManager
70-
case mevmgr of
71-
Nothing -> recvEOFloop buf -- non-threaded RTS
72-
Just evmgr -> recvEOFev evmgr buf
73-
#endif
7467
-- milliseconds. Taken from BSD fast clock value.
7568
clock = 200
7669
recvEOFloop buf = loop 0
@@ -86,35 +79,6 @@ gracefulClose s tmout = sendRecvFIN `E.finally` close s
8679
when (r == -1 && delay' < tmout) $ do
8780
threadDelay (clock * 1000)
8881
loop delay'
89-
#if !defined(mingw32_HOST_OS)
90-
recvEOFev evmgr buf = do
91-
-- Checking if FIN is already received.
92-
r <- recvBufNoWait s buf bufSize
93-
when (r == -1) $ do
94-
tmmgr <- Ev.getSystemTimerManager
95-
mvar <- newEmptyMVar
96-
E.bracket (register evmgr tmmgr mvar) (unregister evmgr tmmgr) $ \_ -> do
97-
wait <- takeMVar mvar
98-
case wait of
99-
TimeoutTripped -> return ()
100-
MoreData -> void $ recvBufNoWait s buf bufSize
101-
register evmgr tmmgr mvar = do
102-
-- millisecond to microsecond
103-
key1 <- Ev.registerTimeout tmmgr (tmout * 1000) $
104-
void $ tryPutMVar mvar TimeoutTripped
105-
key2 <- withFdSocket s $ \fd' -> do
106-
let callback _ _ = void $ tryPutMVar mvar MoreData
107-
fd = Fd fd'
108-
#if __GLASGOW_HASKELL__ < 709
109-
Ev.registerFd evmgr callback fd Ev.evtRead
110-
#else
111-
Ev.registerFd evmgr callback fd Ev.evtRead Ev.OneShot
112-
#endif
113-
return (key1, key2)
114-
unregister evmgr tmmgr (key1,key2) = do
115-
Ev.unregisterTimeout tmmgr key1
116-
Ev.unregisterFd evmgr key2
117-
#endif
11882
-- Don't use 4092 here. The GHC runtime takes the global lock
11983
-- if the length is over 3276 bytes in 32bit or 3272 bytes in 64bit.
12084
bufSize = 1024

0 commit comments

Comments
 (0)