mighttpd2 4.0.11 → 4.0.12
raw patch · 2 files changed
+45/−18 lines, 2 filesdep ~quicdep ~warpdep ~warp-quicPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: quic, warp, warp-quic, warp-tls
API changes (from Hackage documentation)
Files
- mighttpd2.cabal +8/−8
- src/Server.hs +37/−10
mighttpd2.cabal view
@@ -1,6 +1,6 @@ cabal-version: >=1.10 name: mighttpd2-version: 4.0.11+version: 4.0.12 license: BSD3 license-file: LICENSE maintainer: Kazu Yamamoto <kazu@iij.ad.jp>@@ -84,7 +84,7 @@ unordered-containers, wai >=3.2 && <3.3, wai-app-file-cgi >=3.3 && <3.4,- warp >=3.4 && <3.5+ warp >=3.4.21 && <3.5 if impl(ghc >=8) default-extensions: Strict StrictData@@ -131,7 +131,7 @@ wai >=3.2 && <3.3, wai-app-file-cgi >=3.3 && <3.4, wai-logger >=2.3.0,- warp >=3.4 && <3.5+ warp >=3.4.21 && <3.5 if flag(tls) cpp-options: -DHTTP_OVER_TLS@@ -152,12 +152,12 @@ if flag(tls) build-depends: tls,- warp-tls >=3.2.12 && <3.5+ warp-tls >=3.4.17 && <3.5 if flag(quic) build-depends:- quic >= 0.3 && < 0.4,- warp-quic >= 0.0.2+ quic >= 0.3.20 && < 0.4,+ warp-quic >= 0.0.5 if impl(ghc >=8) default-extensions: Strict StrictData@@ -213,12 +213,12 @@ unix, wai, wai-app-file-cgi >=3.3 && <3.4,- warp >=3.4 && <3.5+ warp >=3.4.21 && <3.5 if flag(tls) build-depends: tls,- warp-tls >=3.2.12 && <3.5+ warp-tls >=3.4.17 && <3.5 if impl(ghc >=8) default-extensions: Strict StrictData
src/Server.hs view
@@ -7,6 +7,7 @@ import Control.Concurrent (runInUnboundThread) import Control.Monad (unless, when) import qualified Data.ByteString.Char8 as BS+import Data.IORef (IORef, atomicModifyIORef', newIORef, readIORef) import Data.Streaming.Network (bindPortTCP, bindPortUDP) #if __GLASGOW_HASKELL__ >= 906 import GHC.Conc.Sync@@ -102,12 +103,13 @@ pushlgr = serverpushLogger ap -- HTTP Client Manager mgr <- getManager opt- setHandlers opt rpt svc remover rdr+ stoppers <- newStoppers+ setHandlers opt rpt svc stoppers remover rdr report rpt "Mighty started" runInUnboundThread $ do labelMe "Mighty main (bound thread)"- mighty opt rpt svc lgr pushlgr mgr rdr mcred smgr tmgr+ mighty opt rpt svc stoppers lgr pushlgr mgr rdr mcred smgr tmgr report rpt "Mighty retired" remover exitSuccess@@ -131,8 +133,32 @@ | debug = LogStdout $ naturalToInt logBufferSize | otherwise = LogFile logspec $ naturalToInt logBufferSize -setHandlers :: Option -> Reporter -> Service -> LogRemover -> RouteDBRef -> IO ()-setHandlers opt rpt svc remover rdr = do+-- | The actions that stop the servers, as warp, warp-tls and warp-quic+-- hand them over.+--+-- Each of them stops its own server where it waits for work -- no socket is+-- closed under it and nothing is raised -- and leaves whatever it was+-- serving to finish. A QUIC server also tells the peer of every live+-- connection that it is going, which closing its socket could not.+--+-- There is one shutdown handler in warp's settings and up to three servers+-- sharing it, so what the handler does is keep what it is given, and+-- retiring runs all of it.+newtype Stoppers = Stoppers (IORef [IO ()])++newStoppers :: IO Stoppers+newStoppers = Stoppers <$> newIORef []++keepStopper :: Stoppers -> IO () -> IO ()+keepStopper (Stoppers ref) stop = atomicModifyIORef' ref $ \stops -> (stop : stops, ())++stopServers :: Stoppers -> IO ()+stopServers (Stoppers ref) = readIORef ref >>= sequence_++----------------------------------------------------------------++setHandlers :: Option -> Reporter -> Service -> Stoppers -> LogRemover -> RouteDBRef -> IO ()+setHandlers opt rpt svc stoppers remover rdr = do setHandler sigStop stopHandler setHandler sigRetire retireHandler setHandler sigInfo infoHandler@@ -145,7 +171,9 @@ exitImmediately ExitSuccess retireHandler = Catch $ do report rpt "Mighty retiring"- closeService svc -- this lets warp break+ -- Each server stops accepting where it waits, closes its own+ -- listening socket, and finishes what it is serving.+ stopServers stoppers infoHandler = Catch $ do labelMe "Info signale handler" threadSummary >>= mapM_ (report rpt . showT)@@ -200,12 +228,12 @@ ---------------------------------------------------------------- -mighty :: Option -> Reporter -> Service+mighty :: Option -> Reporter -> Service -> Stoppers -> ApacheLogger -> ServerPushLogger -> ConnPool -> RouteDBRef -> Maybe Credentials -> Maybe SessionManager -> T.Manager -> IO ()-mighty opt rpt svc lgr pushlgr mgr rdr _mcreds _msmgr tmgr+mighty opt rpt svc stoppers lgr pushlgr mgr rdr _mcreds _msmgr tmgr = reportDo rpt $ case svc of HttpOnly s -> runHTTP setting s app #ifdef HTTP_OVER_TLS@@ -236,9 +264,8 @@ #endif where app = fileCgiApp cspec filespec cgispec revproxyspec rdr- -- We don't use setInstallShutdownHandler because we may use- -- two sockets for HTTP and HTTPS.- setting = setPort (naturalToInt $ opt_port opt) -- just in case+ setting = setInstallShutdownHandler (keepStopper stoppers)+ $ setPort (naturalToInt $ opt_port opt) -- just in case $ setHost (fromString (opt_host opt)) -- just in case $ setManager tmgr $ setFdCacheDuration (naturalToInt $ opt_fd_cache_duration opt)