349 uint idx_last_found = 0; |
349 uint idx_last_found = 0; |
350 uint num_last_found = 0; |
350 uint num_last_found = 0; |
351 |
351 |
352 while ((removed < num_regions_to_remove) && |
352 while ((removed < num_regions_to_remove) && |
353 (num_last_found = find_empty_from_idx_reverse(cur, &idx_last_found)) > 0) { |
353 (num_last_found = find_empty_from_idx_reverse(cur, &idx_last_found)) > 0) { |
354 // Only allow uncommit from the end of the heap. |
|
355 if ((idx_last_found + num_last_found) != _allocated_heapregions_length) { |
|
356 return 0; |
|
357 } |
|
358 uint to_remove = MIN2(num_regions_to_remove - removed, num_last_found); |
354 uint to_remove = MIN2(num_regions_to_remove - removed, num_last_found); |
359 |
355 |
360 uncommit_regions(idx_last_found + num_last_found - to_remove, to_remove); |
356 uncommit_regions(idx_last_found + num_last_found - to_remove, to_remove); |
361 |
357 |
362 cur -= num_last_found; |
358 cur -= num_last_found; |