@@ -1073,9 +1073,12 @@ extent_grow_retained(tsdn_t *tsdn, arena_t *arena,
10731073 & zeroed , & committed , (dss_prec_t )atomic_load_u (
10741074 & arena -> dss_prec , ATOMIC_RELAXED ));
10751075 } else {
1076+ assert (!tsdn_null (tsdn ));
1077+ pre_reentrancy (tsdn_tsd (tsdn ));
10761078 ptr = (* r_extent_hooks )-> alloc (* r_extent_hooks , NULL ,
10771079 alloc_size , PAGE , & zeroed , & committed ,
10781080 arena_ind_get (arena ));
1081+ post_reentrancy (tsdn_tsd (tsdn ));
10791082 }
10801083
10811084 extent_init (extent , arena , ptr , alloc_size , false, NSIZES ,
@@ -1247,8 +1250,11 @@ extent_alloc_wrapper_hard(tsdn_t *tsdn, arena_t *arena,
12471250 addr = extent_alloc_default_impl (tsdn , arena , new_addr , esize ,
12481251 alignment , zero , commit );
12491252 } else {
1253+ assert (!tsdn_null (tsdn ));
1254+ pre_reentrancy (tsdn_tsd (tsdn ));
12501255 addr = (* r_extent_hooks )-> alloc (* r_extent_hooks , new_addr ,
12511256 esize , alignment , zero , commit , arena_ind_get (arena ));
1257+ post_reentrancy (tsdn_tsd (tsdn ));
12521258 }
12531259 if (addr == NULL ) {
12541260 extent_dalloc (tsdn , arena , extent );
@@ -1486,10 +1492,13 @@ extent_dalloc_wrapper_try(tsdn_t *tsdn, arena_t *arena,
14861492 err = extent_dalloc_default_impl (extent_base_get (extent ),
14871493 extent_size_get (extent ));
14881494 } else {
1495+ assert (!tsdn_null (tsdn ));
1496+ pre_reentrancy (tsdn_tsd (tsdn ));
14891497 err = ((* r_extent_hooks )-> dalloc == NULL ||
14901498 (* r_extent_hooks )-> dalloc (* r_extent_hooks ,
14911499 extent_base_get (extent ), extent_size_get (extent ),
14921500 extent_committed_get (extent ), arena_ind_get (arena )));
1501+ post_reentrancy (tsdn_tsd (tsdn ));
14931502 }
14941503
14951504 if (!err ) {
@@ -1515,6 +1524,10 @@ extent_dalloc_wrapper(tsdn_t *tsdn, arena_t *arena,
15151524 }
15161525
15171526 extent_reregister (tsdn , extent );
1527+ if (* r_extent_hooks != & extent_hooks_default ) {
1528+ assert (!tsdn_null (tsdn ));
1529+ pre_reentrancy (tsdn_tsd (tsdn ));
1530+ }
15181531 /* Try to decommit; purge if that fails. */
15191532 bool zeroed ;
15201533 if (!extent_committed_get (extent )) {
@@ -1536,6 +1549,9 @@ extent_dalloc_wrapper(tsdn_t *tsdn, arena_t *arena,
15361549 } else {
15371550 zeroed = false;
15381551 }
1552+ if (* r_extent_hooks != & extent_hooks_default ) {
1553+ post_reentrancy (tsdn_tsd (tsdn ));
1554+ }
15391555 extent_zeroed_set (extent , zeroed );
15401556
15411557 if (config_prof ) {
@@ -1579,9 +1595,12 @@ extent_destroy_wrapper(tsdn_t *tsdn, arena_t *arena,
15791595 extent_destroy_default_impl (extent_base_get (extent ),
15801596 extent_size_get (extent ));
15811597 } else if ((* r_extent_hooks )-> destroy != NULL ) {
1598+ assert (!tsdn_null (tsdn ));
1599+ pre_reentrancy (tsdn_tsd (tsdn ));
15821600 (* r_extent_hooks )-> destroy (* r_extent_hooks ,
15831601 extent_base_get (extent ), extent_size_get (extent ),
15841602 extent_committed_get (extent ), arena_ind_get (arena ));
1603+ post_reentrancy (tsdn_tsd (tsdn ));
15851604 }
15861605
15871606 extent_dalloc (tsdn , arena , extent );
@@ -1602,9 +1621,16 @@ extent_commit_impl(tsdn_t *tsdn, arena_t *arena,
16021621 WITNESS_RANK_CORE , growing_retained ? 1 : 0 );
16031622
16041623 extent_hooks_assure_initialized (arena , r_extent_hooks );
1624+ if (* r_extent_hooks != & extent_hooks_default ) {
1625+ assert (!tsdn_null (tsdn ));
1626+ pre_reentrancy (tsdn_tsd (tsdn ));
1627+ }
16051628 bool err = ((* r_extent_hooks )-> commit == NULL ||
16061629 (* r_extent_hooks )-> commit (* r_extent_hooks , extent_base_get (extent ),
16071630 extent_size_get (extent ), offset , length , arena_ind_get (arena )));
1631+ if (* r_extent_hooks != & extent_hooks_default ) {
1632+ post_reentrancy (tsdn_tsd (tsdn ));
1633+ }
16081634 extent_committed_set (extent , extent_committed_get (extent ) || !err );
16091635 return err ;
16101636}
@@ -1633,10 +1659,17 @@ extent_decommit_wrapper(tsdn_t *tsdn, arena_t *arena,
16331659
16341660 extent_hooks_assure_initialized (arena , r_extent_hooks );
16351661
1662+ if (* r_extent_hooks != & extent_hooks_default ) {
1663+ assert (!tsdn_null (tsdn ));
1664+ pre_reentrancy (tsdn_tsd (tsdn ));
1665+ }
16361666 bool err = ((* r_extent_hooks )-> decommit == NULL ||
16371667 (* r_extent_hooks )-> decommit (* r_extent_hooks ,
16381668 extent_base_get (extent ), extent_size_get (extent ), offset , length ,
16391669 arena_ind_get (arena )));
1670+ if (* r_extent_hooks != & extent_hooks_default ) {
1671+ post_reentrancy (tsdn_tsd (tsdn ));
1672+ }
16401673 extent_committed_set (extent , extent_committed_get (extent ) && err );
16411674 return err ;
16421675}
@@ -1663,10 +1696,23 @@ extent_purge_lazy_impl(tsdn_t *tsdn, arena_t *arena,
16631696 WITNESS_RANK_CORE , growing_retained ? 1 : 0 );
16641697
16651698 extent_hooks_assure_initialized (arena , r_extent_hooks );
1666- return ((* r_extent_hooks )-> purge_lazy == NULL ||
1667- (* r_extent_hooks )-> purge_lazy (* r_extent_hooks ,
1699+
1700+ if ((* r_extent_hooks )-> purge_lazy == NULL ) {
1701+ return true;
1702+ }
1703+
1704+ if (* r_extent_hooks != & extent_hooks_default ) {
1705+ assert (!tsdn_null (tsdn ));
1706+ pre_reentrancy (tsdn_tsd (tsdn ));
1707+ }
1708+ bool err = (* r_extent_hooks )-> purge_lazy (* r_extent_hooks ,
16681709 extent_base_get (extent ), extent_size_get (extent ), offset , length ,
1669- arena_ind_get (arena )));
1710+ arena_ind_get (arena ));
1711+ if (* r_extent_hooks != & extent_hooks_default ) {
1712+ post_reentrancy (tsdn_tsd (tsdn ));
1713+ }
1714+
1715+ return err ;
16701716}
16711717
16721718bool
@@ -1699,10 +1745,21 @@ extent_purge_forced_impl(tsdn_t *tsdn, arena_t *arena,
16991745 WITNESS_RANK_CORE , growing_retained ? 1 : 0 );
17001746
17011747 extent_hooks_assure_initialized (arena , r_extent_hooks );
1702- return ((* r_extent_hooks )-> purge_forced == NULL ||
1703- (* r_extent_hooks )-> purge_forced (* r_extent_hooks ,
1748+
1749+ if ((* r_extent_hooks )-> purge_forced == NULL ) {
1750+ return true;
1751+ }
1752+ if (* r_extent_hooks != & extent_hooks_default ) {
1753+ assert (!tsdn_null (tsdn ));
1754+ pre_reentrancy (tsdn_tsd (tsdn ));
1755+ }
1756+ bool err = (* r_extent_hooks )-> purge_forced (* r_extent_hooks ,
17041757 extent_base_get (extent ), extent_size_get (extent ), offset , length ,
1705- arena_ind_get (arena )));
1758+ arena_ind_get (arena ));
1759+ if (* r_extent_hooks != & extent_hooks_default ) {
1760+ post_reentrancy (tsdn_tsd (tsdn ));
1761+ }
1762+ return err ;
17061763}
17071764
17081765bool
@@ -1771,9 +1828,17 @@ extent_split_impl(tsdn_t *tsdn, arena_t *arena,
17711828
17721829 extent_lock2 (tsdn , extent , trail );
17731830
1774- if ((* r_extent_hooks )-> split (* r_extent_hooks , extent_base_get (extent ),
1831+ if (* r_extent_hooks != & extent_hooks_default ) {
1832+ assert (!tsdn_null (tsdn ));
1833+ pre_reentrancy (tsdn_tsd (tsdn ));
1834+ }
1835+ bool err = (* r_extent_hooks )-> split (* r_extent_hooks , extent_base_get (extent ),
17751836 size_a + size_b , size_a , size_b , extent_committed_get (extent ),
1776- arena_ind_get (arena ))) {
1837+ arena_ind_get (arena ));
1838+ if (* r_extent_hooks != & extent_hooks_default ) {
1839+ post_reentrancy (tsdn_tsd (tsdn ));
1840+ }
1841+ if (err ) {
17771842 goto label_error_c ;
17781843 }
17791844
@@ -1843,10 +1908,13 @@ extent_merge_impl(tsdn_t *tsdn, arena_t *arena,
18431908 err = extent_merge_default_impl (extent_base_get (a ),
18441909 extent_base_get (b ));
18451910 } else {
1911+ assert (!tsdn_null (tsdn ));
1912+ pre_reentrancy (tsdn_tsd (tsdn ));
18461913 err = (* r_extent_hooks )-> merge (* r_extent_hooks ,
18471914 extent_base_get (a ), extent_size_get (a ), extent_base_get (b ),
18481915 extent_size_get (b ), extent_committed_get (a ),
18491916 arena_ind_get (arena ));
1917+ post_reentrancy (tsdn_tsd (tsdn ));
18501918 }
18511919
18521920 if (err ) {
0 commit comments