[Vm-dev] VM Maker: VMMaker.oscog-eem.2187.mcz

commits at source.squeak.org commits at source.squeak.org
Mon Mar 27 22:01:01 UTC 2017

Eliot Miranda uploaded a new version of VMMaker to project VM Maker:

==================== 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

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') -----
  	"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).
  		start: highestSuitableFreeBlock + (manager freeChunkLargerIndex * manager bytesPerOop);
  		limit: (manager addressAfter: highestSuitableFreeBlock).
  	savedFirstFieldsSpaceNotInOldSpace := false.
  	self deny: self savedFirstFieldsSpaceWasAllocated!

More information about the Vm-dev mailing list