| 1015 | } |
| 1016 | |
| 1017 | void _mi_segment_page_free(mi_page_t* page, bool force, mi_segments_tld_t* tld) |
| 1018 | { |
| 1019 | mi_assert(page != NULL); |
| 1020 | |
| 1021 | mi_segment_t* segment = _mi_page_segment(page); |
| 1022 | mi_assert_expensive(mi_segment_is_valid(segment,tld)); |
| 1023 | |
| 1024 | // mark it as free now |
| 1025 | mi_segment_page_clear(page, tld); |
| 1026 | mi_assert_expensive(mi_segment_is_valid(segment, tld)); |
| 1027 | |
| 1028 | if (segment->used == 0) { |
| 1029 | // no more used pages; remove from the free list and free the segment |
| 1030 | mi_segment_free(segment, force, tld); |
| 1031 | } |
| 1032 | else if (segment->used == segment->abandoned) { |
| 1033 | // only abandoned pages; remove from free list and abandon |
| 1034 | mi_segment_abandon(segment,tld); |
| 1035 | } |
| 1036 | } |
| 1037 | |
| 1038 | |
| 1039 | /* ----------------------------------------------------------- |
no test coverage detected