fix for incorrect region count

This commit is contained in:
daan 2019-09-03 19:33:38 -07:00
parent f3c082462b
commit b7e506ad9d

View File

@ -152,16 +152,13 @@ static bool mi_region_commit_blocks(mem_region_t* region, size_t idx, size_t bit
else { else {
// failed, another thread allocated just before us! // failed, another thread allocated just before us!
// we assign it to a later slot instead (up to 4 tries). // we assign it to a later slot instead (up to 4 tries).
// note: we don't need to increment the region count, this will happen on another allocation
for(size_t i = 1; i <= 4 && idx + i < MI_REGION_MAX; i++) { for(size_t i = 1; i <= 4 && idx + i < MI_REGION_MAX; i++) {
void* s = mi_atomic_read_ptr(&regions[idx+i].start);
if (s == NULL) { // quick test
if (mi_atomic_cas_ptr_strong(&regions[idx+i].start, start, NULL)) { if (mi_atomic_cas_ptr_strong(&regions[idx+i].start, start, NULL)) {
mi_atomic_increment(&regions_count);
start = NULL; start = NULL;
break; break;
} }
} }
}
if (start != NULL) { if (start != NULL) {
// free it if we didn't succeed to save it to some other region // free it if we didn't succeed to save it to some other region
_mi_os_free(start, MI_REGION_SIZE, tld->stats); _mi_os_free(start, MI_REGION_SIZE, tld->stats);