Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2187.mcz==================== Summary ====================
Name: VMMaker.oscog-eem.2187
Author: eem
Time: 27 March 2017, 3:00:06.676146 pm
UUID: 2259d299-65a4-42d0-a01b-4b25f5a89745
Ancestors: VMMaker.oscog-rsf.2186
SpurPlanningCompactor:
Fix a big in resetting the free chunk used for the firstUnusedFieldsSpace after non-final pasxses (i.e. on snapshot). The old code didn't check to see if a free chunk was actually found(!!).
=============== Diff against VMMaker.oscog-rsf.2186 ===============
Item was added:
+ ----- Method: SpurMemoryManager>>validFreeTreeChunk: (in category 'free space') -----
+ validFreeTreeChunk: chunk
+ <inline: false>
+ (segmentManager segmentContainingObj: chunk) ifNil:
+ [^false].
+ ^(self validFreeTreeChunk: chunk parent: (self fetchPointer: self freeChunkParentIndex ofFreeChunk: chunk)) isNil!
Item was changed:
----- Method: SpurPlanningCompactor>>updateSavedFirstFieldsSpaceIfNecessary (in category 'space management') -----
updateSavedFirstFieldsSpaceIfNecessary
"If savedFirstFieldsSpace is a free chunk then it may need to be repositioned if there is more than one pass."
<inline: true>
+ (self savedFirstFieldsSpaceInFreeChunk
+ and: [savedFirstFieldsSpace start < lastMobileObject]) ifTrue:
+ [(self findHighestSuitableFreeBlock: savedFirstFieldsSpace limit - savedFirstFieldsSpace start)
+ ifNotNil:
+ [:largestFreeChunk|
+ self useFreeChunkForSavedFirstFieldsSpace: largestFreeChunk]
+ ifNil:
+ [self useEdenForSavedFirstFieldsSpace]].
- self savedFirstFieldsSpaceInFreeChunk ifTrue:
- [self useFreeChunkForSavedFirstFieldsSpace: manager findLargestFreeChunk].
savedFirstFieldsSpace top: savedFirstFieldsSpace start - manager bytesPerOop!
Item was changed:
----- Method: SpurPlanningCompactor>>useFreeChunkForSavedFirstFieldsSpace: (in category 'space management') -----
useFreeChunkForSavedFirstFieldsSpace: highestSuitableFreeBlock
"Use the supplied free chunk to hold the savedFirstFieldsSpace. Invoked when
eden is found not to be big enough for the job. Avoid the first few fields so as
not to destroy the free chunk and there by confuse object enumeration."
<inline: true>
+ self assert: (manager validFreeTreeChunk: highestSuitableFreeBlock).
savedFirstFieldsSpace
start: highestSuitableFreeBlock + (manager freeChunkLargerIndex * manager bytesPerOop);
limit: (manager addressAfter: highestSuitableFreeBlock).
savedFirstFieldsSpaceNotInOldSpace := false.
self deny: self savedFirstFieldsSpaceWasAllocated!