Title | MAX_SIZE means different things to MV and MVT pools |
Status | closed |
Priority | optional |
Assigned user | Richard Brooksby |
Organization | Ravenbrook |
Description | The MV pool takes a MAX_SIZE keyword argument that is documented as "the predicted maximum size of blocks that will be allocated from the pool". This is incorrect. It is used by MVInit as an estimate of the *total* maximum size that the pool will reach, in order to preallocate sufficient span descriptors for the pool extents. In fact, MV asserts that it is *larger* than the extent size. The MVT pool takes a MAX_SIZE that is effectively used as the extent size (fillSize), and allocations larger than this are treated as "oversize". |
Analysis | The lines that assert in MV are from the original checkin. This is very old code. The documentation error is very understandable, given that MIN_SIZE, AVG_SIZE, and MAX_SIZE appear to be a set. That's probably what they should mean, and we can introduce another key for total pool size estimates if needed. Both these pools are probably for the chop. In the meantime, I suggest dropping MAX_SIZE from MV. It has very little effect, since it's unlikely that anyone will ever need to preallocate more than a page-worth of span descriptors. We lack coverage tests of the manual pools. |
How found | unknown |
Evidence | Substituting MV for MVT in mv2test.c. |
Introduced in | 1.100.0 |
Created by | Richard Brooksby |
Created on | 2016-03-21 13:21:38 |
Last modified by | Gareth Rees |
Last modified on | 2018-09-19 12:57:47 |
History | 2016-03-21 RB Created. |
Change | Effect | Date | User | Description |
---|---|---|---|---|
194869 | closed | 2018-08-02 14:43:29 | Gareth Rees | Merge branch/2018-08-01/rm-mv into the master sources. |