summaryrefslogtreecommitdiff
path: root/src/Network/StreamServer.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Network/StreamServer.hs')
-rw-r--r--src/Network/StreamServer.hs16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/Network/StreamServer.hs b/src/Network/StreamServer.hs
index a6cead0e..34b9388e 100644
--- a/src/Network/StreamServer.hs
+++ b/src/Network/StreamServer.hs
@@ -1,4 +1,5 @@
1-- | This module implements a bare-bones TCP or Unix socket server. 1-- | This module implements a bare-bones TCP or Unix socket server.
2{-# LANGUAGE CPP #-}
2{-# LANGUAGE TypeFamilies #-} 3{-# LANGUAGE TypeFamilies #-}
3{-# LANGUAGE TypeOperators #-} 4{-# LANGUAGE TypeOperators #-}
4{-# LANGUAGE OverloadedStrings #-} 5{-# LANGUAGE OverloadedStrings #-}
@@ -34,7 +35,12 @@ import System.IO
34 ) 35 )
35import Control.Monad 36import Control.Monad
36import Control.Monad.Fix (fix) 37import Control.Monad.Fix (fix)
37import Control.Concurrent (forkIO, threadDelay, ThreadId, mkWeakThreadId) 38#ifdef THREAD_DEBUG
39import Control.Concurrent.Lifted.Instrument (forkIO, threadDelay, ThreadId, mkWeakThreadId, labelThread, myThreadId)
40#else
41import GHC.Conc (labelThread)
42import Control.Concurrent (forkIO, threadDelay, ThreadId, mkWeakThreadId, myThreadId)
43#endif
38import Control.Exception (catch,handle,try,finally) 44import Control.Exception (catch,handle,try,finally)
39import System.IO.Error (tryIOError) 45import System.IO.Error (tryIOError)
40import System.Mem.Weak 46import System.Mem.Weak
@@ -113,7 +119,9 @@ streamServer cfg addr = do
113 threadDelay 5000000 119 threadDelay 5000000
114 loop 120 loop
115 listen sock maxListenQueue 121 listen sock maxListenQueue
116 thread <- mkWeakThreadId <=< forkIO $ acceptLoop cfg sock 0 122 thread <- mkWeakThreadId <=< forkIO $ do
123 myThreadId >>= flip labelThread "StreamServer.acceptLoop"
124 acceptLoop cfg sock 0
117 return (ServerHandle sock thread) 125 return (ServerHandle sock thread)
118 126
119-- | Not exported. This, combined with 'acceptException' form a mutually recursive 127-- | Not exported. This, combined with 'acceptException' form a mutually recursive
@@ -124,7 +132,9 @@ acceptLoop cfg sock n = handle (acceptException cfg n sock) $ do
124 con <- accept sock 132 con <- accept sock
125 let conkey = n + 1 133 let conkey = n + 1
126 h <- socketToHandle (fst con) ReadWriteMode 134 h <- socketToHandle (fst con) ReadWriteMode
127 forkIO $ serverSession cfg (restrictHandleSocket h (fst con)) conkey h 135 forkIO $ do
136 myThreadId >>= flip labelThread "StreamServer.session"
137 serverSession cfg (restrictHandleSocket h (fst con)) conkey h
128 acceptLoop cfg sock (n + 1) 138 acceptLoop cfg sock (n + 1)
129 139
130acceptException :: ServerConfig -> Int -> Socket -> IOError -> IO () 140acceptException :: ServerConfig -> Int -> Socket -> IOError -> IO ()