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!
vm-dev@lists.squeakfoundation.org