diff options
Diffstat (limited to 'src/Network/StreamServer.hs')
-rw-r--r-- | src/Network/StreamServer.hs | 16 |
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 | ) |
35 | import Control.Monad | 36 | import Control.Monad |
36 | import Control.Monad.Fix (fix) | 37 | import Control.Monad.Fix (fix) |
37 | import Control.Concurrent (forkIO, threadDelay, ThreadId, mkWeakThreadId) | 38 | #ifdef THREAD_DEBUG |
39 | import Control.Concurrent.Lifted.Instrument (forkIO, threadDelay, ThreadId, mkWeakThreadId, labelThread, myThreadId) | ||
40 | #else | ||
41 | import GHC.Conc (labelThread) | ||
42 | import Control.Concurrent (forkIO, threadDelay, ThreadId, mkWeakThreadId, myThreadId) | ||
43 | #endif | ||
38 | import Control.Exception (catch,handle,try,finally) | 44 | import Control.Exception (catch,handle,try,finally) |
39 | import System.IO.Error (tryIOError) | 45 | import System.IO.Error (tryIOError) |
40 | import System.Mem.Weak | 46 | import 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 | ||
130 | acceptException :: ServerConfig -> Int -> Socket -> IOError -> IO () | 140 | acceptException :: ServerConfig -> Int -> Socket -> IOError -> IO () |