equal
deleted
inserted
replaced
1746 (\infos -> |
1746 (\infos -> |
1747 case lookup_info infos id of |
1747 case lookup_info infos id of |
1748 Nothing -> (infos, ()) |
1748 Nothing -> (infos, ()) |
1749 Just info -> (Map.insert id (f info) infos, ())) |
1749 Just info -> (Map.insert id (f info) infos, ())) |
1750 |
1750 |
|
1751 delete_info :: ThreadId -> IO () |
|
1752 delete_info id = |
|
1753 atomicModifyIORef' global_state (\infos -> (Map.delete id infos, ())) |
|
1754 |
1751 |
1755 |
1752 {- thread properties -} |
1756 {- thread properties -} |
1753 |
1757 |
1754 my_info :: IO Info |
1758 my_info :: IO Info |
1755 my_info = do |
1759 my_info = do |
1787 Thread.forkIO |
1791 Thread.forkIO |
1788 (Exception.try |
1792 (Exception.try |
1789 (do |
1793 (do |
1790 id <- Concurrent.myThreadId |
1794 id <- Concurrent.myThreadId |
1791 atomicModifyIORef' global_state (init_info id uuid) |
1795 atomicModifyIORef' global_state (init_info id uuid) |
1792 restore body) >>= finally)) |
1796 restore body) |
|
1797 >>= (\res -> do id <- Concurrent.myThreadId; delete_info id; finally res))) |
1793 return (id, uuid, result) |
1798 return (id, uuid, result) |
1794 |
1799 |
1795 fork :: IO a -> IO (Fork a) |
1800 fork :: IO a -> IO (Fork a) |
1796 fork body = fork_finally body Thread.result |
1801 fork body = fork_finally body Thread.result |
1797 \<close> |
1802 \<close> |