Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2968.mcz==================== Summary ====================
Name: VMMaker.oscog-eem.2968
Author: eem
Time: 18 June 2021, 4:24:48.734961 pm
UUID: f7018c3a-ddc0-4f70-aa66-8f8f6b17f40f
Ancestors: VMMaker.oscog-eem.2967
In rare circumstances the Display bits oop can be nil post GC. Avoid an assert failure and unnecessary work if it is.
=============== Diff against VMMaker.oscog-eem.2967 ===============
Item was changed:
----- Method: StackInterpreter>>postGCUpdateDisplayBits (in category 'object memory support') -----
postGCUpdateDisplayBits
"Update the displayBits after a GC may have moved it.
Answer if the displayBits appear valid. The wrinkle here is that the displayBits could be a surface handle."
<inline: false>
| displayObj bitsOop bitsNow |
displayObj := objectMemory splObj: TheDisplay.
((objectMemory isPointers: displayObj)
and: [(objectMemory lengthOf: displayObj) >= 4]) ifFalse:
[^false].
bitsOop := objectMemory fetchPointer: 0 ofObject: displayObj.
+ (bitsOop = objectMemory nilObject "it ain't yet set"
+ or: [objectMemory isIntegerObject: bitsOop]) ifTrue: "It's a surface; our work here is done..."
- (objectMemory isIntegerObject: bitsOop) ifTrue: "It's a surface; our work here is done..."
[^true].
self assert: ((objectMemory addressCouldBeObj: bitsOop)
and: [objectMemory isWordsOrBytes: bitsOop]).
(objectMemory hasSpurMemoryManagerAPI
and: [objectMemory isPinned: bitsOop]) ifFalse:
[bitsNow := self cCode: [objectMemory firstIndexableField: bitsOop]
inSmalltalk: [(objectMemory firstIndexableField: bitsOop) asInteger].
displayBits ~= bitsNow ifTrue:
[displayBits := bitsNow.
self ioNoteDisplayChanged: displayBits width: displayWidth height: displayHeight depth: displayDepth].
(objectMemory hasSpurMemoryManagerAPI
and: [stackPage ~= 0]) ifTrue: "If stackPage is zero we're snapshotting and now is not the time to pin."
[objectMemory pinObject: bitsOop]].
^true!