Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.483.mcz
==================== Summary ====================
Name: VMMaker.oscog-eem.483 Author: eem Time: 29 October 2013, 6:57:29.448 pm UUID: 2b2db56c-c062-41fe-81fa-f872365cde4f Ancestors: VMMaker.oscog-eem.482
Fix bug in eliminateAndFreeForwarders that forgot to free the last run of forwarded objects in the final sweep.
=============== Diff against VMMaker.oscog-eem.482 ===============
Item was changed: ----- Method: SpurMemoryManager>>eliminateAndFreeForwarders (in category 'gc - global') ----- eliminateAndFreeForwarders "As the final phase of global garbage collect, sweep the heap to follow forwarders, then free forwarders" | lowestForwarded firstForwarded lastForwarded | self assert: (self isForwarded: nilObj) not. self assert: (self isForwarded: falseObj) not. self assert: (self isForwarded: trueObj) not. self assert: (self isForwarded: hiddenRootsObj) not. (self isForwarded: specialObjectsOop) ifTrue: [specialObjectsOop := self followForwarded: specialObjectsOop]. scavenger followRememberedForwardersAndForgetFreeObjects. self doScavenge: TenureByAge. lowestForwarded := 0. "sweep, following forwarders in all live objects, and finding the first forwarder." self allOldSpaceObjectsDo: [:o| (self isForwarded: o) ifTrue: [lowestForwarded = 0 ifTrue: [lowestForwarded := o]] ifFalse: [0 to: (self numPointerSlotsOf: o) - 1 do: [:i| | f | f := self fetchPointer: i ofObject: o. (self isOopForwarded: f) ifTrue: [f := self followForwarded: f. self assert: ((self isImmediate: f) or: [self isYoung: f]) not. self storePointerUnchecked: i ofObject: o withValue: f]]]]. firstForwarded := lastForwarded := 0. "sweep from lowest forwarder, coalescing runs of forwarders." self allOldSpaceObjectsFrom: lowestForwarded do: [:o| (self isForwarded: o) ifTrue: [firstForwarded = 0 ifTrue: [firstForwarded := o]. lastForwarded := o] ifFalse: [firstForwarded ~= 0 ifTrue: [| start bytes | + start := self startOfObject: firstForwarded. + bytes := (self addressAfter: lastForwarded) - start. + self addFreeChunkWithBytes: bytes at: start]. + firstForwarded := 0]]. + firstForwarded ~= 0 ifTrue: + [| start bytes | + start := self startOfObject: firstForwarded. + bytes := (self addressAfter: lastForwarded) - start. + self addFreeChunkWithBytes: bytes at: start].! - start := self startOfObject: firstForwarded. - bytes := (self addressAfter: lastForwarded) - start. - self addFreeChunkWithBytes: bytes at: start]. - firstForwarded := 0]]!
vm-dev@lists.squeakfoundation.org