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/RaiseAsync.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/RaiseAsync.c')
-rw-r--r-- | rts/RaiseAsync.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/rts/RaiseAsync.c b/rts/RaiseAsync.c index a0f78eeff7..fad28035e6 100644 --- a/rts/RaiseAsync.c +++ b/rts/RaiseAsync.c @@ -792,7 +792,7 @@ raiseAsync(Capability *cap, StgTSO *tso, StgClosure *exception, // fun field. // words = frame - sp - 1; - ap = (StgAP_STACK *)allocateLocal(cap,AP_STACK_sizeW(words)); + ap = (StgAP_STACK *)allocate(cap,AP_STACK_sizeW(words)); ap->size = words; ap->fun = (StgClosure *)sp[0]; @@ -856,7 +856,7 @@ raiseAsync(Capability *cap, StgTSO *tso, StgClosure *exception, // we've got an exception to raise, so let's pass it to the // handler in this frame. // - raise = (StgThunk *)allocateLocal(cap,sizeofW(StgThunk)+1); + raise = (StgThunk *)allocate(cap,sizeofW(StgThunk)+1); TICK_ALLOC_SE_THK(1,0); SET_HDR(raise,&stg_raise_info,cf->header.prof.ccs); raise->payload[0] = exception; |