more refined decommit extend delay
@@ -540,9 +540,13 @@ static void mi_segment_perhaps_decommit(mi_segment_t* segment, uint8_t* p, size_
}
else if (segment->decommit_expire <= now) {
// previous decommit mask already expired
- // mi_segment_delayed_decommit(segment, true, stats);
+ if (segment->decommit_expire + mi_option_get(mi_option_decommit_extend_delay) <= now) {
+ mi_segment_delayed_decommit(segment, true, stats);
+ }
+ else {
segment->decommit_expire = now + mi_option_get(mi_option_decommit_extend_delay); // (mi_option_get(mi_option_decommit_delay) / 8); // wait a tiny bit longer in case there is a series of free's
}
+ }
else {
// previous decommit mask is not yet expired, increase the expiration by a bit.
segment->decommit_expire += mi_option_get(mi_option_decommit_extend_delay);
