Skip to content

Commit

Permalink
Fixing errors when detecting to put or not object in remembered set
Browse files Browse the repository at this point in the history
  • Loading branch information
tesonep committed Jul 7, 2022
1 parent 94ecd8d commit cc56865
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 9 deletions.
6 changes: 3 additions & 3 deletions smalltalksrc/VMMaker/SpurGenerationScavenger.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -745,6 +745,8 @@ SpurGenerationScavenger >> mapOopsFromPermSpace [
sourceIndex := sourceIndex + 1].

manager getFromPermSpaceRememberedSet setRememberedSetSize: destIndex.

self assert: (manager isPermSpaceRememberedSetSane).
]

{ #category : #accessing }
Expand Down Expand Up @@ -1170,9 +1172,7 @@ SpurGenerationScavenger >> scavengeReferentsOfFromPermSpace: referrer [
scavengeReferentsOf: referrer
additionalShouldKeepReferrerTestingBlock: [ :aReferrer :referent |
(manager isPermanent: referent) not
or: [ manager isFixedKnownObject: referent ] ].

self assert: (manager isPermSpaceRememberedSetSane).
and: [ (manager isFixedKnownObject: referent) not ] ].

^ returnValue.
]
Expand Down
20 changes: 14 additions & 6 deletions smalltalksrc/VMMaker/SpurMemoryManager.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -7465,14 +7465,22 @@ SpurMemoryManager >> isPermSpaceRememberedSetSane [
referenced := self fetchPointer: index ofObject: objOop.
((self isFixedKnownObject: referenced) not
and: [ (self isNonImmediate: referenced)
and: [(self getMemoryMap isYoungObject: referenced)
or: [ self getMemoryMap isOldObject: referenced ]])
or: [ self getMemoryMap isOldObject: referenced ]]])
ifTrue: [ mustBeRemembered := true]].
mustBeRemembered ifTrue: [
((self isRemembered: objOop)
and: [self getFromPermSpaceRememberedSet isInRememberedSet: objOop])
ifFalse: [ self error: 'Object should be in remembered set'. ]]
(self getFromPermSpaceRememberedSet isInRememberedSet: objOop)
ifFalse: [ self error: 'Object should be in remembered set'. ].
(self isRemembered: objOop)
ifFalse: [ self error: 'Object should be marked as remembered' ]]
ifFalse: [
(self getFromPermSpaceRememberedSet isInRememberedSet: objOop)
ifTrue: [ self error: 'Object should not be in remembered set'. ].
(self isRemembered: objOop)
ifTrue: [ self error: 'Object should not be marked as remembered' ]
].
].
^ true.
Expand Down Expand Up @@ -8816,9 +8824,9 @@ SpurMemoryManager >> moveToPermSpace: objOop [
"We check only if the object has not be already detected and only for the pointer slots."
((shouldBeRememberedInOldSpace not and: [ i <= numPointerSlots ])
and: [ (((memoryMap isOldObject: referenced)
and: [ (self isNonImmediate: referenced) and: [ (((memoryMap isOldObject: referenced)
or: [memoryMap isYoungObject: referenced])
and: [ (self isFixedKnownObject: referenced) not ]) ])
and: [ (self isFixedKnownObject: referenced) not ]) ]])
ifTrue: [ shouldBeRememberedInOldSpace := true ].
self
Expand Down

0 comments on commit cc56865

Please sign in to comment.