supervisor: Fix assertion error in supervisor_move_memory
It was possible for _only_ a low allocation to be performed. In this case, `high_head` is NULL, and the comparison `MP_STATE_VM(first_embedded_allocation) < high_head` would fail. Closes: #4871
This commit is contained in:
parent
eef3ca54a5
commit
1d03ec12b5
@ -236,6 +236,7 @@ size_t get_allocation_length(supervisor_allocation *allocation) {
|
||||
return ALLOCATION_NODE(allocation)->length & ~FLAGS;
|
||||
}
|
||||
|
||||
|
||||
void supervisor_move_memory(void) {
|
||||
// This whole function is not needed when there are no movable allocations, let it be optimized
|
||||
// out.
|
||||
@ -244,7 +245,9 @@ void supervisor_move_memory(void) {
|
||||
}
|
||||
// This must be called exactly after freeing the heap, so that the embedded allocations, if any,
|
||||
// are now in the free region.
|
||||
assert(MP_STATE_VM(first_embedded_allocation) == NULL || (low_head < MP_STATE_VM(first_embedded_allocation) && MP_STATE_VM(first_embedded_allocation) < high_head));
|
||||
assert(MP_STATE_VM(first_embedded_allocation) == NULL || (
|
||||
(low_head == NULL || low_head < MP_STATE_VM(first_embedded_allocation)) &&
|
||||
(high_head == NULL || MP_STATE_VM(first_embedded_allocation) < high_head)));
|
||||
|
||||
// Save the old pointers for allocation_from_ptr().
|
||||
supervisor_allocation old_allocations_array[CIRCUITPY_SUPERVISOR_ALLOC_COUNT];
|
||||
|
Loading…
x
Reference in New Issue
Block a user