Skip to content
  • Simon Marlow's avatar
    Use message-passing to implement throwTo in the RTS · 7408b392
    Simon Marlow authored
    This replaces some complicated locking schemes with message-passing
    in the implementation of throwTo. The benefits are
    
     - previously it was impossible to guarantee that a throwTo from
       a thread running on one CPU to a thread running on another CPU
       would be noticed, and we had to rely on the GC to pick up these
       forgotten exceptions. This no longer happens.
    
     - the locking regime is simpler (though the code is about the same
       size)
    
     - threads can be unblocked from a blocked_exceptions queue without
       having to traverse the whole queue now.  It's a rare case, but
       replaces an O(n) operation with an O(1).
    
     - generally we move in the direction of sharing less between
       Capabilities (aka HECs), which will become important with other
       changes we have planned.
    
    Also in this patch I replaced several STM-specific closure types with
    a generic MUT_PRIM closure type, which allowed a lot of code in the GC
    and other places to go away, hence the line-count reduction.  The
    message-passing changes resulted in about a net zero line-count
    difference.
    7408b392