on master help sign in
Merge remote-tracking branch 'origin/master'
77aac7eMichael Snoyman
warp/Network/Wai/Handler/Warp.hs+1
@@ -31,6 +31,7 @@ module Network.Wai.Handler.Warp (
31 , settingsTimeout
31 , settingsTimeout
32 , settingsIntercept
32 , settingsIntercept
33 , settingsManager
33 , settingsManager
34+ , settingsFdCacheDuration
34 -- ** Data types
35 -- ** Data types
35 , HostPreference (..)
36 , HostPreference (..)
36 -- * Connection
37 -- * Connection
warp/Network/Wai/Handler/Warp/FdCache.hs+3−3
@@ -76,8 +76,8 @@ look mfc path key = searchWith key check <$> fdCache mfc
76
76
77----------------------------------------------------------------
77----------------------------------------------------------------
78
78
79−initialize :: IO MutableFdCache
79+initialize :: Int -> IO MutableFdCache
80−initialize = do
80+initialize duration = do
81 mfc <- newMutableFdCache
81 mfc <- newMutableFdCache
82 void . forkIO $ loop mfc
82 void . forkIO $ loop mfc
83 return mfc
83 return mfc
@@ -86,7 +86,7 @@ initialize = do
86 old <- swapWithNew mfc
86 old <- swapWithNew mfc
87 new <- pruneWith old prune
87 new <- pruneWith old prune
88 update mfc (merge new)
88 update mfc (merge new)
89− threadDelay 10000000 -- FIXME
89+ threadDelay duration
90 loop mfc
90 loop mfc
91
91
92prune :: t -> Some FdEntry -> IO [(t, Some FdEntry)]
92prune :: t -> Some FdEntry -> IO [(t, Some FdEntry)]
warp/Network/Wai/Handler/Warp/Run.hs+1−1
@@ -126,7 +126,7 @@ runSettingsConnection set getConn app = do
126 tm <- maybe (T.initialize $ settingsTimeout set * 1000000) return
126 tm <- maybe (T.initialize $ settingsTimeout set * 1000000) return
127 $ settingsManager set
127 $ settingsManager set
128#if !WINDOWS
128#if !WINDOWS
129− fc <- F.initialize
129+ fc <- F.initialize (settingsFdCacheDuration set * 1000000)
130#endif
130#endif
131 mask $ \restore -> forever $ do
131 mask $ \restore -> forever $ do
132 allowInterrupt
132 allowInterrupt
warp/Network/Wai/Handler/Warp/Settings.hs+2
@@ -25,6 +25,7 @@ data Settings = Settings
25 , settingsTimeout :: Int -- ^ Timeout value in seconds. Default value: 30
25 , settingsTimeout :: Int -- ^ Timeout value in seconds. Default value: 30
26 , settingsIntercept :: Request -> Maybe (Source (ResourceT IO) S.ByteString -> Connection -> ResourceT IO ())
26 , settingsIntercept :: Request -> Maybe (Source (ResourceT IO) S.ByteString -> Connection -> ResourceT IO ())
27 , settingsManager :: Maybe Manager -- ^ Use an existing timeout manager instead of spawning a new one. If used, 'settingsTimeout' is ignored. Default is 'Nothing'
27 , settingsManager :: Maybe Manager -- ^ Use an existing timeout manager instead of spawning a new one. If used, 'settingsTimeout' is ignored. Default is 'Nothing'
28+ , settingsFdCacheDuration :: Int -- ^ Cache duratoin time of file descriptors in seconds. Default value: 10
28 }
29 }
29
30
30-- | The default settings for the Warp server. See the individual settings for
31-- | The default settings for the Warp server. See the individual settings for
@@ -44,6 +45,7 @@ defaultSettings = Settings
44 , settingsTimeout = 30
45 , settingsTimeout = 30
45 , settingsIntercept = const Nothing
46 , settingsIntercept = const Nothing
46 , settingsManager = Nothing
47 , settingsManager = Nothing
48+ , settingsFdCacheDuration = 10
47 }
49 }
48 where
50 where
49 go :: InvalidRequest -> IO ()
51 go :: InvalidRequest -> IO ()