Title | Objects in LO pools are not all finalized |
Status | closed |
Priority | essential |
Assigned user | Gareth Rees |
Organization | Ravenbrook |
Description | You can delete all references to objects in an LO pool, but they are not all finalized. Some are missed! There's a test case in finaltest on the 2014-04-22/condemn branch, commented out with a reference to this job. |
Analysis | This creates 10220 objects, of which only 10200 are finalized. What happens to the other 20? It seems that they are still in the buffer, and LOWhiten just ignores buffered segments, so they are never condemned and never finalized. This is clearly deliberate: there is a comment, "buffered segs are not condemned". But this seems wrong to me: it means that an object allocated in an LO pool cannot be finalized (or weak references to it splatted) until the buffer is filled. [following discussion between RB, DL, and NB:] Buffered segs should be condemned: it's a SMOP which might be easy to adapt from AMS. More broadly: LO and AMS should be able to share a lot of code: they are both non-moving mark-and-sweep pool classes, and LO can make use of the additional information that its objects contain no references. So LO and AMS are related in an analogous way to AMCZ and AMC. |
How found | manual_test |
Evidence | None |
Test procedure | finaltest |
Created by | Gareth Rees |
Created on | 2014-04-22 18:20:05 |
Last modified by | Gareth Rees |
Last modified on | 2014-10-20 17:33:44 |
History | 2014-04-22 GDR Created. |
Change | Effect | Date | User | Description |
---|---|---|---|---|
186409 | closed | 2014-06-03 14:52:47 | Richard Brooksby | Merge branch mps/branch/2014-04-23/awl into the master sources |