Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
Glasgow Haskell Compiler
GHC
Commits
78956377
Commit
78956377
authored
Apr 24, 2008
by
simonmarhaskell@gmail.com
Browse files
FIX the compacting GC again
parent
01ccdeea
Changes
1
Hide whitespace changes
Inline
Side-by-side
rts/sm/GC.c
View file @
78956377
...
...
@@ -182,7 +182,6 @@ GarbageCollect ( rtsBool force_major_gc )
bdescr
*
bd
;
step
*
stp
;
lnat
live
,
allocated
,
max_copied
,
avg_copied
,
slop
;
lnat
oldgen_saved_blocks
=
0
;
gc_thread
*
saved_gct
;
nat
g
,
s
,
t
,
n
;
...
...
@@ -391,14 +390,6 @@ GarbageCollect ( rtsBool force_major_gc )
#endif
// NO MORE EVACUATION AFTER THIS POINT!
// Finally: compaction of the oldest generation.
if
(
major_gc
&&
oldest_gen
->
steps
[
0
].
is_compacted
)
{
// save number of blocks for stats
oldgen_saved_blocks
=
oldest_gen
->
steps
[
0
].
n_old_blocks
;
compact
(
gct
->
scavenged_static_objects
);
}
IF_DEBUG
(
sanity
,
checkGlobalTSOList
(
rtsFalse
));
// Two-space collector: free the old to-space.
// g0s0->old_blocks is the old nursery
...
...
@@ -492,6 +483,13 @@ GarbageCollect ( rtsBool force_major_gc )
}
}
// Finally: compaction of the oldest generation.
if
(
major_gc
&&
oldest_gen
->
steps
[
0
].
is_compacted
)
{
compact
(
gct
->
scavenged_static_objects
);
}
IF_DEBUG
(
sanity
,
checkGlobalTSOList
(
rtsFalse
));
/* run through all the generations/steps and tidy up
*/
copied
=
0
;
...
...
@@ -555,19 +553,21 @@ GarbageCollect ( rtsBool force_major_gc )
if
(
!
(
g
==
0
&&
s
==
0
&&
RtsFlags
.
GcFlags
.
generations
>
1
))
{
if
(
stp
->
is_compacted
)
{
// for a compacted step, just shift the new to-space
// onto the front of the now-compacted existing blocks.
for
(
bd
=
stp
->
blocks
;
bd
!=
NULL
;
bd
=
bd
->
link
)
{
stp
->
n_words
+=
bd
->
free
-
bd
->
start
;
}
// tack the new blocks on the end of the existing blocks
if
(
stp
->
old_blocks
!=
NULL
)
{
for
(
bd
=
stp
->
old_blocks
;
bd
!=
NULL
;
bd
=
next
)
{
stp
->
n_words
+=
bd
->
free
-
bd
->
start
;
// NB. this step might not be compacted next
// time, so reset the BF_COMPACTED flags.
// They are set before GC if we're going to
// compact. (search for BF_COMPACTED above).
bd
->
flags
&=
~
BF_COMPACTED
;
// between GCs, all blocks in the heap except
// for the nursery have the BF_EVACUATED flag set.
bd
->
flags
|=
BF_EVACUATED
;
next
=
bd
->
link
;
if
(
next
==
NULL
)
{
bd
->
link
=
stp
->
blocks
;
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment