With 64 bytes heap and 1 byte allocation on a big heap, we get: 0 1 2 3 4 5 6 7 | h | h | b | b | c | 1 | s | f | where - h: chunk0 header - b: buckets in chunk0 - c: chunk header for the first allocation - 1: chunk mem - s: solo free header - f: end marker / footer max_chunkid() was returning h->end_chunk - min_chunk_size(h), which is 5 because min_chunk_size() on a big heap is 2. This works if you don't have the solo free header at 6 and the heap is like: 0 1 2 3 4 5 6 | h | h | b | b | c | 1 | f | max_chunkid() in this case gives you 6 - 2 = 4, which is the right chunkid for the last chunk header. This commit replaces max_chunkid() with h->end_chunk and "<=" (less than or equal to) with "<" (less than), so that it always compares against the end maker chunkid, but the code won't touch the end maker itself. Signed-off-by: Yasushi SHOJI <yashi@spacecubics.com> |
||
|---|---|---|
| .. | ||
| gui | ||
| libc | ||
| open-amp | ||
| os | ||
| posix | ||
| util | ||
| CMakeLists.txt | ||
| Kconfig | ||