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

Function extent_recycle

deps/jemalloc/src/extent.c:1127–1200  ·  view source on GitHub ↗

* Tries to satisfy the given allocation request by reusing one of the extents * in the given extents_t. */

Source from the content-addressed store, hash-verified

1125 * in the given extents_t.
1126 */
1127static extent_t *
1128extent_recycle(tsdn_t *tsdn, arena_t *arena, extent_hooks_t **r_extent_hooks,
1129 extents_t *extents, void *new_addr, size_t size, size_t pad,
1130 size_t alignment, bool slab, szind_t szind, bool *zero, bool *commit,
1131 bool growing_retained) {
1132 witness_assert_depth_to_rank(tsdn_witness_tsdp_get(tsdn),
1133 WITNESS_RANK_CORE, growing_retained ? 1 : 0);
1134 assert(new_addr == NULL || !slab);
1135 assert(pad == 0 || !slab);
1136 assert(!*zero || !slab);
1137
1138 rtree_ctx_t rtree_ctx_fallback;
1139 rtree_ctx_t *rtree_ctx = tsdn_rtree_ctx(tsdn, &rtree_ctx_fallback);
1140
1141 extent_t *extent = extent_recycle_extract(tsdn, arena, r_extent_hooks,
1142 rtree_ctx, extents, new_addr, size, pad, alignment, slab,
1143 growing_retained);
1144 if (extent == NULL) {
1145 return NULL;
1146 }
1147
1148 extent = extent_recycle_split(tsdn, arena, r_extent_hooks, rtree_ctx,
1149 extents, new_addr, size, pad, alignment, slab, szind, extent,
1150 growing_retained);
1151 if (extent == NULL) {
1152 return NULL;
1153 }
1154
1155 if (*commit && !extent_committed_get(extent)) {
1156 if (extent_commit_impl(tsdn, arena, r_extent_hooks, extent,
1157 0, extent_size_get(extent), growing_retained)) {
1158 extent_record(tsdn, arena, r_extent_hooks, extents,
1159 extent, growing_retained);
1160 return NULL;
1161 }
1162 if (!extent_need_manual_zero(arena)) {
1163 extent_zeroed_set(extent, true);
1164 }
1165 }
1166
1167 if (extent_committed_get(extent)) {
1168 *commit = true;
1169 }
1170 if (extent_zeroed_get(extent)) {
1171 *zero = true;
1172 }
1173
1174 if (pad != 0) {
1175 extent_addr_randomize(tsdn, extent, alignment);
1176 }
1177 assert(extent_state_get(extent) == extent_state_active);
1178 if (slab) {
1179 extent_slab_set(extent, slab);
1180 extent_interior_register(tsdn, rtree_ctx, extent, szind);
1181 }
1182
1183 if (*zero) {
1184 void *addr = extent_base_get(extent);

Callers 2

extents_allocFunction · 0.70
extent_alloc_retainedFunction · 0.70

Calls 15

extent_need_manual_zeroFunction · 0.85
extent_recycle_extractFunction · 0.70
extent_recycle_splitFunction · 0.70
extent_commit_implFunction · 0.70
extent_recordFunction · 0.70
extent_interior_registerFunction · 0.70
pages_purge_forcedFunction · 0.70
extent_committed_getFunction · 0.50
extent_size_getFunction · 0.50
extent_zeroed_setFunction · 0.50
extent_zeroed_getFunction · 0.50

Tested by

no test coverage detected