@@ -23,7 +23,6 @@ import Control.Concurrent.STM.TBQueue
2323 , writeTBQueue
2424 , flushTBQueue
2525 )
26- import Control.Concurrent.STM.TVar
2726import Control.Monad (replicateM )
2827import qualified Data.List.NonEmpty as NE
2928import Data.Word (Word16 )
@@ -42,10 +41,9 @@ initForwardSink
4241initForwardSink ForwarderConfiguration {disconnectedQueueSize, connectedQueueSize} callback = do
4342 -- Initially we always create a big queue, because during node's start
4443 -- the number of tracing items may be very big.
45- queueTVar <- atomically $
46- newTVar =<< newTBQueue (fromIntegral disconnectedQueueSize)
44+ queue <- atomically $ newTBQueue (fromIntegral disconnectedQueueSize)
4745 return $ ForwardSink
48- { forwardQueue = queueTVar
46+ { forwardQueue = queue
4947 , disconnectedSize = disconnectedQueueSize
5048 , connectedSize = connectedQueueSize
5149 , overflowCallback = callback
@@ -62,10 +60,9 @@ writeToSink ForwardSink{forwardQueue,overflowCallback} traceObject = do
6260 -- Don't call the overflow function with an empty list.
6361 _ -> overflowCallback flushedTraceObjects
6462
65- writeToSinkSTM :: TVar ( TBQueue lo ) -> lo -> STM [lo ]
66- writeToSinkSTM queueTVar traceObject = do
63+ writeToSinkSTM :: TBQueue lo -> lo -> STM [lo ]
64+ writeToSinkSTM queue traceObject = do
6765 ---------- STM transaction: start ----------
68- queue <- readTVar queueTVar
6966 isFull <- isFullTBQueue queue
7067 ! flushedTraceObjects <- if isFull
7168 then flushTBQueue queue
@@ -93,15 +90,14 @@ readFromSink ForwardSink{forwardQueue} =
9390 , Forwarder. recvMsgDone = return ()
9491 }
9592
96- readFromSinkSTM :: TVar ( TBQueue lo )
93+ readFromSinkSTM :: TBQueue lo
9794 -- If queue is empty, block or not?
9895 -> TokBlockingStyle blocking
9996 -- Maximum number of requested trace objects.
10097 -> Word16
10198 -> STM [lo ]
102- readFromSinkSTM queueTVar blocking n = do
99+ readFromSinkSTM queue blocking n = do
103100 ---------- STM transaction: start ----------
104- queue <- readTVar queueTVar
105101 -- Instead of using `isEmptyTBQueue`, that internally may read only one TVar,
106102 -- we optimize for the critical path, the case in which the queue has objects
107103 -- and directly use `lengthTBQueue` that always reads two TVars.
0 commit comments