diff options
author | Simon Marlow <marlowsd@gmail.com> | 2010-03-09 14:31:11 +0000 |
---|---|---|
committer | Simon Marlow <marlowsd@gmail.com> | 2010-03-09 14:31:11 +0000 |
commit | 7effbbbbdfe7eb05c6402fa9337e358e7e9fadde (patch) | |
tree | d5896a7858db38265b77fc799fc54d5151737aab /includes | |
parent | 4e8b07dbc753a5132c574926468ba886728c9049 (diff) | |
download | haskell-7effbbbbdfe7eb05c6402fa9337e358e7e9fadde.tar.gz |
Split part of the Task struct into a separate struct InCall
The idea is that this leaves Tasks and OSThread in one-to-one
correspondence. The part of a Task that represents a call into
Haskell from C is split into a separate struct InCall, pointed to by
the Task and the TSO bound to it. A given OSThread/Task thus always
uses the same mutex and condition variable, rather than getting a new
one for each callback. Conceptually it is simpler, although there are
more types and indirections in a few places now.
This improves callback performance by removing some of the locks that
we had to take when making in-calls. Now we also keep the current Task
in a thread-local variable if supported by the OS and gcc (currently
only Linux).
Diffstat (limited to 'includes')
-rw-r--r-- | includes/rts/storage/TSO.h | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/includes/rts/storage/TSO.h b/includes/rts/storage/TSO.h index b00f5d416f..e8d97c5ce0 100644 --- a/includes/rts/storage/TSO.h +++ b/includes/rts/storage/TSO.h @@ -114,7 +114,7 @@ typedef struct StgTSO_ { StgTSOBlockInfo block_info; StgThreadID id; int saved_errno; - struct Task_* bound; + struct InCall_* bound; struct Capability_* cap; struct StgTRecHeader_ * trec; /* STM transaction record */ |