@@ -119,10 +119,7 @@ forkFinally1 action and_then =
119forkIt :: (MonadBaseControl IO m, MonadIO m) => EventF -> (EventF -> m t) -> m ()
119forkIt :: (MonadBaseControl IO m, MonadIO m) => EventF -> (EventF -> m t) -> m ()
120forkIt current proc = do
120forkIt current proc = do
121 child <- newChildCont current
121 child <- newChildCont current
122− tid <- forkFinally1 (runInChild proc child)
122+ tid <- forkFinally1 (proc child) (beforeExit child)
125− beforeExit child{threadId = thId} res
126 updatePendingThreads current tid
123 updatePendingThreads current tid
@@ -144,11 +141,6 @@ forkIt current proc = do
144 , zombieChannel = chan
141 , zombieChannel = chan
147− runInChild m child = do
148− th <- liftIO $ myThreadId
149− dbg $ "Forked: child " ++ show th
150− m child{threadId = th}
152 beforeExit cur res = do
144 beforeExit cur res = do
153 case res of
145 case res of
154 Left _exc -> liftIO $ killChildren cur
146 Left _exc -> liftIO $ killChildren cur
@@ -161,7 +153,8 @@ forkIt current proc = do
161 -- We are guaranteed to have a parent because we have been explicitly
153 -- We are guaranteed to have a parent because we have been explicitly
162 -- forked by some parent.
154 -- forked by some parent.
163 let p = fromJust (parent cur)
155 let p = fromJust (parent cur)
164− liftIO $ atomically $ writeTChan (zombieChannel p) (threadId cur)
157+ liftIO $ atomically $ writeTChan (zombieChannel p) tid
166forkMaybe :: (MonadBaseControl IO m, MonadIO m) => EventF -> (EventF -> m ()) -> m ()
159forkMaybe :: (MonadBaseControl IO m, MonadIO m) => EventF -> (EventF -> m ()) -> m ()
167forkMaybe current toRun = do
160forkMaybe current toRun = do
@@ -179,9 +172,7 @@ forkMaybe current toRun = do
179 waitForOneChild (zombieChannel current)
172 waitForOneChild (zombieChannel current)
180 (pendingThreads current)
173 (pendingThreads current)
181 forkMaybe current toRun
174 forkMaybe current toRun
183− dbg $ "Forking: parent " ++ show (threadId current)
184− forkIt current toRun
175+ True -> forkIt current toRun
186-- | 'StreamData' represents a task in a task stream being generated.
177-- | 'StreamData' represents a task in a task stream being generated.
187data StreamData a =
178data StreamData a =