MCPcopy Create free account
hub / github.com/F-Stack/f-stack / extent_recycle

Function extent_recycle

app/redis-6.2.6/deps/jemalloc/src/extent.c:1060–1129  ·  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

1058 * in the given extents_t.
1059 */
1060static extent_t *
1061extent_recycle(tsdn_t *tsdn, arena_t *arena, extent_hooks_t **r_extent_hooks,
1062 extents_t *extents, void *new_addr, size_t size, size_t pad,
1063 size_t alignment, bool slab, szind_t szind, bool *zero, bool *commit,
1064 bool growing_retained) {
1065 witness_assert_depth_to_rank(tsdn_witness_tsdp_get(tsdn),
1066 WITNESS_RANK_CORE, growing_retained ? 1 : 0);
1067 assert(new_addr == NULL || !slab);
1068 assert(pad == 0 || !slab);
1069 assert(!*zero || !slab);
1070
1071 rtree_ctx_t rtree_ctx_fallback;
1072 rtree_ctx_t *rtree_ctx = tsdn_rtree_ctx(tsdn, &rtree_ctx_fallback);
1073
1074 extent_t *extent = extent_recycle_extract(tsdn, arena, r_extent_hooks,
1075 rtree_ctx, extents, new_addr, size, pad, alignment, slab,
1076 growing_retained);
1077 if (extent == NULL) {
1078 return NULL;
1079 }
1080
1081 extent = extent_recycle_split(tsdn, arena, r_extent_hooks, rtree_ctx,
1082 extents, new_addr, size, pad, alignment, slab, szind, extent,
1083 growing_retained);
1084 if (extent == NULL) {
1085 return NULL;
1086 }
1087
1088 if (*commit && !extent_committed_get(extent)) {
1089 if (extent_commit_impl(tsdn, arena, r_extent_hooks, extent,
1090 0, extent_size_get(extent), growing_retained)) {
1091 extent_record(tsdn, arena, r_extent_hooks, extents,
1092 extent, growing_retained);
1093 return NULL;
1094 }
1095 extent_zeroed_set(extent, true);
1096 }
1097
1098 if (extent_committed_get(extent)) {
1099 *commit = true;
1100 }
1101 if (extent_zeroed_get(extent)) {
1102 *zero = true;
1103 }
1104
1105 if (pad != 0) {
1106 extent_addr_randomize(tsdn, extent, alignment);
1107 }
1108 assert(extent_state_get(extent) == extent_state_active);
1109 if (slab) {
1110 extent_slab_set(extent, slab);
1111 extent_interior_register(tsdn, rtree_ctx, extent, szind);
1112 }
1113
1114 if (*zero) {
1115 void *addr = extent_base_get(extent);
1116 size_t size = extent_size_get(extent);
1117 if (!extent_zeroed_get(extent)) {

Callers 2

extents_allocFunction · 0.85
extent_alloc_retainedFunction · 0.85

Calls 15

extent_recycle_extractFunction · 0.85
extent_recycle_splitFunction · 0.85
extent_committed_getFunction · 0.85
extent_commit_implFunction · 0.85
extent_size_getFunction · 0.85
extent_recordFunction · 0.85
extent_zeroed_setFunction · 0.85
extent_zeroed_getFunction · 0.85
extent_addr_randomizeFunction · 0.85
extent_state_getFunction · 0.85
extent_slab_setFunction · 0.85

Tested by

no test coverage detected