Geom_grow: Move in advancing logic.
This commit is contained in:
committed by
David Goldblatt
parent
131b1b5338
commit
ffe552223c
@@ -21,6 +21,33 @@ struct geom_grow_s {
|
||||
malloc_mutex_t mtx;
|
||||
};
|
||||
|
||||
static inline bool
|
||||
geom_grow_size_prepare(geom_grow_t *geom_grow, size_t alloc_size_min,
|
||||
size_t *r_alloc_size, pszind_t *r_skip) {
|
||||
*r_skip = 0;
|
||||
*r_alloc_size = sz_pind2sz(geom_grow->next + *r_skip);
|
||||
while (*r_alloc_size < alloc_size_min) {
|
||||
(*r_skip)++;
|
||||
if (geom_grow->next + *r_skip >=
|
||||
sz_psz2ind(SC_LARGE_MAXCLASS)) {
|
||||
/* Outside legal range. */
|
||||
return true;
|
||||
}
|
||||
*r_alloc_size = sz_pind2sz(geom_grow->next + *r_skip);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline void
|
||||
geom_grow_size_commit(geom_grow_t *geom_grow, pszind_t skip) {
|
||||
if (geom_grow->next + skip + 1 <= geom_grow->limit) {
|
||||
geom_grow->next += skip + 1;
|
||||
} else {
|
||||
geom_grow->next = geom_grow->limit;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
bool geom_grow_init(tsdn_t *tsdn, geom_grow_t *geom_grow);
|
||||
void geom_grow_prefork(tsdn_t *tsdn, geom_grow_t *geom_grow);
|
||||
void geom_grow_postfork_parent(tsdn_t *tsdn, geom_grow_t *geom_grow);
|
||||
|
Reference in New Issue
Block a user