fedab40576
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> |
||
---|---|---|
.. | ||
CMakeLists.txt | ||
Kconfig | ||
Kconfig.cbprintf | ||
assert.c | ||
base64.c | ||
bitarray.c | ||
cbprintf.c | ||
cbprintf_complete.c | ||
cbprintf_nano.c | ||
cbprintf_packaged.c | ||
crc7_sw.c | ||
crc8_sw.c | ||
crc16_sw.c | ||
crc32_sw.c | ||
crc32c_sw.c | ||
dec.c | ||
fdtable.c | ||
heap-validate.c | ||
heap.c | ||
heap.h | ||
hex.c | ||
json.c | ||
mpsc_pbuf.c | ||
mutex.c | ||
notify.c | ||
onoff.c | ||
p4wq.c | ||
printk.c | ||
rb.c | ||
reboot.c | ||
ring_buffer.c | ||
sem.c | ||
thread_entry.c | ||
timeutil.c | ||
user_work.c |