VM Maker: VMMaker.oscog-cb.2274.mcz

Previous Topic Next Topic
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view

VM Maker: VMMaker.oscog-cb.2274.mcz

ClementBera uploaded a new version of VMMaker to project VM Maker:

==================== 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') -----
  | 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:
  setIsMarkedOf: newObj to: true;
  setIsMarkedOf: obj to: false].
  manager freeObject: obj.
  rememberedSet := base.
  rememberedSetLimit := manager numSlotsOf: newObj.
  self setRememberedSetRedZone!