MCPcopy Create free account
hub / github.com/Snapchat/KeyDB / extent_dalloc_wrapper

Function extent_dalloc_wrapper

deps/jemalloc/src/extent.c:1806–1862  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1804}
1805
1806void
1807extent_dalloc_wrapper(tsdn_t *tsdn, arena_t *arena,
1808 extent_hooks_t **r_extent_hooks, extent_t *extent) {
1809 assert(extent_dumpable_get(extent));
1810 witness_assert_depth_to_rank(tsdn_witness_tsdp_get(tsdn),
1811 WITNESS_RANK_CORE, 0);
1812
1813 /* Avoid calling the default extent_dalloc unless have to. */
1814 if (*r_extent_hooks != &extent_hooks_default || extent_may_dalloc()) {
1815 /*
1816 * Deregister first to avoid a race with other allocating
1817 * threads, and reregister if deallocation fails.
1818 */
1819 extent_deregister(tsdn, extent);
1820 if (!extent_dalloc_wrapper_try(tsdn, arena, r_extent_hooks,
1821 extent)) {
1822 return;
1823 }
1824 extent_reregister(tsdn, extent);
1825 }
1826
1827 if (*r_extent_hooks != &extent_hooks_default) {
1828 extent_hook_pre_reentrancy(tsdn, arena);
1829 }
1830 /* Try to decommit; purge if that fails. */
1831 bool zeroed;
1832 if (!extent_committed_get(extent)) {
1833 zeroed = true;
1834 } else if (!extent_decommit_wrapper(tsdn, arena, r_extent_hooks, extent,
1835 0, extent_size_get(extent))) {
1836 zeroed = true;
1837 } else if ((*r_extent_hooks)->purge_forced != NULL &&
1838 !(*r_extent_hooks)->purge_forced(*r_extent_hooks,
1839 extent_base_get(extent), extent_size_get(extent), 0,
1840 extent_size_get(extent), arena_ind_get(arena))) {
1841 zeroed = true;
1842 } else if (extent_state_get(extent) == extent_state_muzzy ||
1843 ((*r_extent_hooks)->purge_lazy != NULL &&
1844 !(*r_extent_hooks)->purge_lazy(*r_extent_hooks,
1845 extent_base_get(extent), extent_size_get(extent), 0,
1846 extent_size_get(extent), arena_ind_get(arena)))) {
1847 zeroed = false;
1848 } else {
1849 zeroed = false;
1850 }
1851 if (*r_extent_hooks != &extent_hooks_default) {
1852 extent_hook_post_reentrancy(tsdn);
1853 }
1854 extent_zeroed_set(extent, zeroed);
1855
1856 if (config_prof) {
1857 extent_gdump_sub(tsdn, extent);
1858 }
1859
1860 extent_record(tsdn, arena, r_extent_hooks, &arena->extents_retained,
1861 extent, false);
1862}
1863

Callers 4

extent_dalloc_gapFunction · 0.70
arena_decay_stashedFunction · 0.70
arena_decay_extentFunction · 0.50

Calls 15

extent_dumpable_getFunction · 0.85
extent_may_dallocFunction · 0.85
extent_deregisterFunction · 0.70
extent_reregisterFunction · 0.70
extent_decommit_wrapperFunction · 0.70
extent_gdump_subFunction · 0.70
extent_recordFunction · 0.70
extent_committed_getFunction · 0.50

Tested by

no test coverage detected