From bba766820fef4ff9504f8d121faf59d1a2456e4c Mon Sep 17 00:00:00 2001 From: Kazu Yamamoto Date: Mon, 8 Jul 2024 11:29:20 +0900 Subject: [PATCH] using waitCounter0 when GOAWAY is received --- Network/HTTP2/H2/Receiver.hs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Network/HTTP2/H2/Receiver.hs b/Network/HTTP2/H2/Receiver.hs index ce635ec7..7ebdf61d 100644 --- a/Network/HTTP2/H2/Receiver.hs +++ b/Network/HTTP2/H2/Receiver.hs @@ -23,6 +23,7 @@ import Network.HTTP2.Frame import Network.HTTP2.H2.Context import Network.HTTP2.H2.EncodeFrame import Network.HTTP2.H2.HPACK +import Network.HTTP2.H2.Manager import Network.HTTP2.H2.Queue import Network.HTTP2.H2.Settings import Network.HTTP2.H2.Stream @@ -60,6 +61,8 @@ frameReceiver ctx@Context{..} conf@Config{..} = do yield loop 0 | otherwise = do + -- If 'confReadN' is timeouted, an exception is thrown + -- to destroy the thread trees. hd <- confReadN frameHeaderLength if BS.null hd then enqueueControl controlQ $ CFinish ConnectionIsClosed @@ -68,7 +71,8 @@ frameReceiver ctx@Context{..} conf@Config{..} = do loop (n + 1) sendGoaway se - | Just e@ConnectionIsClosed <- E.fromException se = + | Just e@ConnectionIsClosed <- E.fromException se = do + waitCounter0 threadManager enqueueControl controlQ $ CFinish e | Just e@(ConnectionErrorIsReceived _ _ _) <- E.fromException se = enqueueControl controlQ $ CFinish e