ClementBera uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-cb.2274.mcz==================== Summary ====================
Name: VMMaker.oscog-cb.2274
Author: cb
Time: 23 October 2017, 12:41:56.36461 pm
UUID: da339b2d-9f5b-4cab-99b2-867bbc942530
Ancestors: VMMaker.oscog-cb.2273
Fix the growth of the remembered table during GC when there is not enough memory in old space. Allocates an extra memory segment in that case. This is very uncommon.
Please check the thread: "[Vm-dev] VM crash with message 'could not grow remembered set' " to reproduce the problem.
=============== Diff against VMMaker.oscog-cb.2273 ===============
Item was changed:
----- Method: SpurGenerationScavenger>>growRememberedSet (in category 'remembered set') -----
growRememberedSet
| obj numSlots newObj base |
<inline: false> "Don't ruin locality in remember:"
<var: #base type: #'sqInt *'>
obj := manager rememberedSetObj.
numSlots := manager numSlotsOf: obj.
self assert: numSlots >= 1024.
newObj := manager allocatePinnedSlots: numSlots * 2.
newObj ifNil:
[newObj := manager allocatePinnedSlots: numSlots + 1024.
newObj ifNil:
+ [(manager growOldSpaceByAtLeast: numSlots + 1024) ifNil: [self error: 'could not grow remembered set'].
+ newObj := manager allocatePinnedSlots: numSlots + 1024. "cannot fail"]].
- [self error: 'could not grow remembered set']].
manager rememberedSetObj: newObj.
base := manager firstIndexableField: newObj.
0 to: rememberedSetSize - 1 do:
[:i| base at: i put: (rememberedSet at: i)].
"if growing in the middle of a GC, need to preserve marked status."
(manager isMarked: obj) ifTrue:
[manager
setIsMarkedOf: newObj to: true;
setIsMarkedOf: obj to: false].
manager freeObject: obj.
rememberedSet := base.
rememberedSetLimit := manager numSlotsOf: newObj.
self setRememberedSetRedZone!