1. 26 Apr, 2010 2 commits
  2. 24 Apr, 2010 3 commits
  3. 23 Apr, 2010 1 commit
  4. 22 Apr, 2010 3 commits
  5. 21 Apr, 2010 2 commits
  6. 20 Apr, 2010 3 commits
  7. 31 Mar, 2010 1 commit
  8. 13 Apr, 2010 1 commit
  9. 16 Apr, 2010 2 commits
  10. 12 Apr, 2010 2 commits
  11. 15 Apr, 2010 2 commits
  12. 12 Apr, 2010 2 commits
  13. 09 Apr, 2010 2 commits
  14. 30 Mar, 2010 1 commit
  15. 07 Apr, 2010 5 commits
  16. 06 Apr, 2010 5 commits
  17. 01 Apr, 2010 3 commits
    • Simon Marlow's avatar
      fix bug in migrateThread() · 20fcaaba
      Simon Marlow authored
    • Simon Marlow's avatar
      Remove the IND_OLDGEN and IND_OLDGEN_PERM closure types · 70a2431f
      Simon Marlow authored
      These are no longer used: once upon a time they used to have different
      layout from IND and IND_PERM respectively, but that is no longer the
      case since we changed the remembered set to be an array of addresses
      instead of a linked list of closures.
    • Simon Marlow's avatar
      Change the representation of the MVar blocked queue · f4692220
      Simon Marlow authored
      The list of threads blocked on an MVar is now represented as a list of
      separately allocated objects rather than being linked through the TSOs
      themselves.  This lets us remove a TSO from the list in O(1) time
      rather than O(n) time, by marking the list object.  Removing this
      linear component fixes some pathalogical performance cases where many
      threads were blocked on an MVar and became unreachable simultaneously
      (nofib/smp/threads007), or when sending an asynchronous exception to a
      TSO in a long list of thread blocked on an MVar.
      MVar performance has actually improved by a few percent as a result of
      this change, slightly to my surprise.
      This is the final cleanup in the sequence, which let me remove the old
      way of waking up threads (unblockOne(), MSG_WAKEUP) in favour of the
      new way (tryWakeupThread and MSG_TRY_WAKEUP, which is idempotent).  It
      is now the case that only the Capability that owns a TSO may modify
      its state (well, almost), and this simplifies various things.  More of
      the RTS is based on message-passing between Capabilities now.