| Title | Assertion failure if you try to create a small arena |
| Status | closed |
| Priority | optional |
| Assigned user | Gareth Rees |
| Organization | Ravenbrook |
| Description | MMQA test function/121 [1] tries to create a virtual memory arena with initial size 65536. It fails with this assertion: arena.c:131: MPS ASSERTION FAILED: ((Size)1 << arena->zoneShift) >= arena->alignment There are three problems with this: 1. There's no indication in the documentation that creating a small arena might fail. 2. Failing with an assertion rather than returning MPS_RES_PARAM is naughty. 3. Why does this have to fail anyway? It's a virtual memory arena that's capable of extending itself if need be, so why not just round up to minimum size? (Originally reported by RIT [2].) |
| Analysis | The minimum size of a virtual memory arena is pagesize * MPS_WORD_WIDTH -- on 64-bit OS X that's 4096 * 64 = 262144. ArenaCreate tries to return a result code (ResMEMORY though) but because it only detects the problem after it has called class->init (VMArenaInit in this case), it has to call class->finish (VMArenaFinish in this case), and the first thing that VMArenaFinish does is AVERT(Arena, arena) which calls ArenaCheck which asserts. |
| How found | automated_test |
| Evidence | [1] http://www.ravenbrook.com/project/mps/master/test/function/121.c[2] https://info.ravenbrook.com/project/mp...2001-11-05/mmprevol/request/mps/160091/ |
| Observed in | 1.111.0 |
| Created by | Gareth Rees |
| Created on | 2013-05-25 20:06:46 |
| Last modified by | Gareth Rees |
| Last modified on | 2014-10-08 22:16:56 |
| History | 2013-05-25 GDR Created. |
| Change | Effect | Date | User | Description |
|---|---|---|---|---|
| 187164 | closed | 2014-10-08 22:16:56 | Gareth Rees | If you try to create a client arena that's too small for the full complement of zones, return MPS_RES_MEMORY instead of asserting. If you try to create a virtual memory arena that's too small for the full complement of zones, round up the size to the minimum instead of asserting. |