From 5a23c9ae90ee42e51a708c0016e55fbbecdf5290 Mon Sep 17 00:00:00 2001 From: Connor Clark Date: Wed, 27 Jul 2016 16:50:48 -0700 Subject: [PATCH] make serverLoop blocking again (#59) --- src/Network/GRPC/HighLevel/Server/Unregistered.hs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Network/GRPC/HighLevel/Server/Unregistered.hs b/src/Network/GRPC/HighLevel/Server/Unregistered.hs index 31cfc21..77ef56b 100644 --- a/src/Network/GRPC/HighLevel/Server/Unregistered.hs +++ b/src/Network/GRPC/HighLevel/Server/Unregistered.hs @@ -9,6 +9,7 @@ module Network.GRPC.HighLevel.Server.Unregistered where import Control.Concurrent +import Control.Concurrent.Async (async, wait) import Control.Arrow import qualified Control.Exception as CE import Control.Monad @@ -81,10 +82,10 @@ dispatchLoop server meta hN hC hS hB = U.serverRW server call meta (convertServerRWHandler h) serverLoop :: ServerOptions -> IO () -serverLoop ServerOptions{..} = +serverLoop ServerOptions{..} = do -- We run the loop in a new thread so that we can kill the serverLoop thread. -- Without this fork, we block on a foreign call, which can't be interrupted. - void $ forkIO $ withGRPC $ \grpc -> + tid <- async $ withGRPC $ \grpc -> withServer grpc config $ \server -> do dispatchLoop server optInitialMetadata @@ -92,6 +93,7 @@ serverLoop ServerOptions{..} = optClientStreamHandlers optServerStreamHandlers optBiDiStreamHandlers + wait tid where config = ServerConfig