MPS issue job004049

TitleAllocation between whiten and reclaim/detach is not accounted as condemned
Statusclosed
Priorityessential
Assigned userGareth Rees
OrganizationRavenbrook
DescriptionFound by Jenkins build #460 [1]:

$ w3i3mv/cool/amcss 260105407
[...]
.\locus.c:205: MPS ASSERTION FAILED: survived <= stats->condemned

Also MMQA test function/46.c on w3i6mv:

$ perl test/qa debug function/46.c
% MPS ASSERTION FAILURE
!assert=true
!assertid=<none>
!assertfile=c:\users\gdr\info.ravenbrook.com\project\mps\version\1.116\code\locus.c
!assertline=205
!assertcond=survived <= stats->condemned
AnalysisAllocation on a buffer that occurs after whiten and before reclaim or detach is not accounted as condemned, but may be accounted as survived.

In AMCWhiten, we account everything up to BufferScanLimit as condemned. In AMCBufferEmpty, we account for the unallocated part of the buffer as condemned. But this leaves a gap -- anything allocated from the buffer after AMCWhiten is not accounted as condemned. Clearly we need to remember the value of BufferScanLimit at the point where AMCWhiten was called, and then in AMCBufferEmpty and AMCReclaim we need to account as condemned everything between that remembered value and the current value.

DL points out that we don't need to make a new slot to store the remembered value of BufferScanLimit -- instead we can set BufferBase to BufferScanLimit at that point, and then in AMCBufferEmpty/AMCReclaim we account everything between BufferBase and BufferScanLimit as condemned.
How foundautomated_test
Evidence[1] https://info.ravenbrook.com/mail/2016/09/08/10-56-23/0/
Created byGareth Rees
Created on2016-09-14 12:06:50
Last modified byGareth Rees
Last modified on2016-09-14 12:49:51
History2016-09-14 GDR Created.

Fixes

Change Effect Date User Description
192387 closed 2016-09-14 12:49:51 Gareth Rees Account allocations in AMC segments between whiten and reclaim as condemned, improving the accuracy of the mortality calculation and avoiding assertion failure.