MCPcopy Create free account
hub / github.com/emscripten-core/emscripten / validate_memory_regions

Function validate_memory_regions

system/lib/emmalloc.c:410–448  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

408}
409
410static int validate_memory_regions() {
411 ASSERT_MALLOC_IS_ACQUIRED();
412 RootRegion *root = listOfAllRegions;
413 while (root) {
414 Region *r = (Region*)root;
415 if (!debug_region_is_consistent(r)) {
416 MAIN_THREAD_ASYNC_EM_ASM(err('Used region '+ptrToString($0)+', size: '+Number($1)+' ('+($2?"used":"--FREE--")+') is corrupt (size markers in the beginning and at the end of the region do not match!)'),
417 r, r->size, region_ceiling_size(r) == r->size);
418 return 1;
419 }
420 uint8_t *lastRegionEnd = root->endPtr;
421 while ((uint8_t*)r < lastRegionEnd) {
422 if (!debug_region_is_consistent(r)) {
423 MAIN_THREAD_ASYNC_EM_ASM(err('Used region '+ptrToString($0)+', size: '+Number($1)+' ('+($2?"used":"--FREE--")+') is corrupt (size markers in the beginning and at the end of the region do not match!)'),
424 r, r->size, region_ceiling_size(r) == r->size);
425 return 1;
426 }
427 if (r->size == 0) {
428 break;
429 }
430 r = next_region(r);
431 }
432 root = root->next;
433 }
434 for (int i = 0; i < NUM_FREE_BUCKETS; ++i) {
435 Region *prev = &freeRegionBuckets[i];
436 Region *fr = freeRegionBuckets[i].next;
437 while (fr != &freeRegionBuckets[i]) {
438 if (!debug_region_is_consistent(fr) || !region_is_free(fr) || fr->prev != prev || fr->next == fr || fr->prev == fr) {
439 MAIN_THREAD_ASYNC_EM_ASM(out('In bucket '+$0+', free region '+ptrToString($1)+', size: ' + Number($2) + ' (size at ceiling: '+Number($3)+'), prev: ' + ptrToString($4) + ', next: 0x' + ptrToString($5) + ' is corrupt!'),
440 i, fr, fr->size, size_of_region_from_ceiling(fr), fr->prev, fr->next);
441 return 1;
442 }
443 prev = fr;
444 fr = fr->next;
445 }
446 }
447 return 0;
448}
449
450int emmalloc_validate_memory_regions() {
451 MALLOC_ACQUIRE();

Callers 3

claim_more_memoryFunction · 0.85
allocate_memoryFunction · 0.85

Calls 8

ptrToStringFunction · 0.85
region_ceiling_sizeFunction · 0.85
next_regionFunction · 0.85
region_is_freeFunction · 0.85
errFunction · 0.50
outFunction · 0.50

Tested by

no test coverage detected