diff options
author | Simon Marlow <marlowsd@gmail.com> | 2009-12-01 16:03:21 +0000 |
---|---|---|
committer | Simon Marlow <marlowsd@gmail.com> | 2009-12-01 16:03:21 +0000 |
commit | 5270423a6afe69f1dc57e5e5a474812182718d40 (patch) | |
tree | 254cc0d910b315c47723a7a7fdd393fffbdee5ea /rts/Capability.c | |
parent | 063b822bb68f84dd9729327bb1765637c25aceb4 (diff) | |
download | haskell-5270423a6afe69f1dc57e5e5a474812182718d40.tar.gz |
Make allocatePinned use local storage, and other refactorings
This is a batch of refactoring to remove some of the GC's global
state, as we move towards CPU-local GC.
- allocateLocal() now allocates large objects into the local
nursery, rather than taking a global lock and allocating
then in gen 0 step 0.
- allocatePinned() was still allocating from global storage and
taking a lock each time, now it uses local storage.
(mallocForeignPtrBytes should be faster with -threaded).
- We had a gen 0 step 0, distinct from the nurseries, which are
stored in a separate nurseries[] array. This is slightly strange.
I removed the g0s0 global that pointed to gen 0 step 0, and
removed all uses of it. I think now we don't use gen 0 step 0 at
all, except possibly when there is only one generation. Possibly
more tidying up is needed here.
- I removed the global allocate() function, and renamed
allocateLocal() to allocate().
- the alloc_blocks global is gone. MAYBE_GC() and
doYouWantToGC() now check the local nursery only.
Diffstat (limited to 'rts/Capability.c')
-rw-r--r-- | rts/Capability.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/rts/Capability.c b/rts/Capability.c index 95050baaa9..0012c24cc8 100644 --- a/rts/Capability.c +++ b/rts/Capability.c @@ -253,6 +253,7 @@ initCapability( Capability *cap, nat i ) cap->free_trec_headers = NO_TREC; cap->transaction_tokens = 0; cap->context_switch = 0; + cap->pinned_object_block = NULL; } /* --------------------------------------------------------------------------- |