Title | Allocation between whiten and reclaim/detach is not accounted as condemned |
Status | closed |
Priority | essential |
Assigned user | Gareth Rees |
Organization | Ravenbrook |
Description | Found 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 |
Analysis | Allocation 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 found | automated_test |
Evidence | [1] https://info.ravenbrook.com/mail/2016/09/08/10-56-23/0/ |
Created by | Gareth Rees |
Created on | 2016-09-14 12:06:50 |
Last modified by | Gareth Rees |
Last modified on | 2016-09-14 12:49:51 |
History | 2016-09-14 GDR Created. |
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. |