@@ -239,10 +239,13 @@ processHeap q heap st sv winfo entry sno stopping = loopHeap sno entry
239 -- transferring available results from heap to outputQueue.
239 -- transferring available results from heap to outputQueue.
240 void $ liftIO $ send sv (ChildYield a)
240 void $ liftIO $ send sv (ChildYield a)
241 nextHeap seqNo
241 nextHeap seqNo
242− AheadEntryStream r ->
242+ AheadEntryStream (RunInIO runin, r) ->
243 if stopping
243 if stopping
244 then stopIfNeeded ent seqNo r
244 then stopIfNeeded ent seqNo r
245− else runStreamWithYieldLimit True seqNo r
246+ res <- liftIO $ runin (runStreamWithYieldLimit True seqNo r)
247 nextHeap prevSeqNo = do
250 nextHeap prevSeqNo = do
248 res <- liftIO $ dequeueFromHeapSeq heap (prevSeqNo + 1)
251 res <- liftIO $ dequeueFromHeapSeq heap (prevSeqNo + 1)
@@ -299,11 +302,13 @@ processHeap q heap st sv winfo entry sno stopping = loopHeap sno entry
299 (singleStreamFromHeap seqNo)
302 (singleStreamFromHeap seqNo)
302− else liftIO $ do
305+ else do
306+ runIn <- captureMonadState
303− let ent = Entry seqNo (AheadEntryStream r)
307+ let ent = Entry seqNo (AheadEntryStream (runIn, r))
304− liftIO $ requeueOnHeapTop heap ent seqNo
309+ requeueOnHeapTop heap ent seqNo
305− incrementYieldLimit sv
310+ incrementYieldLimit sv
306− sendStop sv winfo
311+ sendStop sv winfo
308 yieldStreamFromHeap seqNo a r = do
313 yieldStreamFromHeap seqNo a r = do
309 continue <- liftIO $ sendYield sv winfo (ChildYield a)
314 continue <- liftIO $ sendYield sv winfo (ChildYield a)
@@ -352,7 +357,9 @@ processWithoutToken q heap st sv winfo m seqNo = do
353 r <- liftIO $ mrun $
358 r <- liftIO $ mrun $
354 foldStreamShared st
359 foldStreamShared st
361+ runIn <- captureMonadState
355− (\a r -> toHeap $ AheadEntryStream $ K.cons a r)
362+ toHeap $ AheadEntryStream (runIn, K.cons a r))
356 (toHeap . AheadEntryPure)
363 (toHeap . AheadEntryPure)
@@ -454,7 +461,8 @@ processWithToken q heap st sv winfo action sno = do
464+ runIn <- captureMonadState
457− let ent = Entry seqNo (AheadEntryStream r)
465+ let ent = Entry seqNo (AheadEntryStream (runIn, r))
458 liftIO $ requeueOnHeapTop heap ent seqNo
466 liftIO $ requeueOnHeapTop heap ent seqNo
459 liftIO $ incrementYieldLimit sv
467 liftIO $ incrementYieldLimit sv
460 return TokenSuspend
468 return TokenSuspend