* @param[in] _type of structure which will be held in the slab elements.
*/
#define FR_SLAB_TYPES(_name, _type) \
- FR_DLIST_TYPES(fr_ ## _name ## _slab) \
- FR_DLIST_TYPES(fr_ ## _name ## _slab_element) \
+ FR_DLIST_TYPES(_name ## _slab) \
+ FR_DLIST_TYPES(_name ## _slab_element) \
\
- typedef int (*fr_ ## _type ## _slab_free_t)(_type *elem, void *uctx); \
- typedef int (*fr_ ## _type ## _slab_alloc_t)(_type *elem, void *uctx); \
- typedef int (*fr_ ## _type ## _slab_reserve_t)(_type *elem, void *uctx); \
+ typedef int (*_type ## _slab_free_t)(_type *elem, void *uctx); \
+ typedef int (*_type ## _slab_alloc_t)(_type *elem, void *uctx); \
+ typedef int (*_type ## _slab_reserve_t)(_type *elem, void *uctx); \
\
typedef struct { \
- FR_DLIST_HEAD(fr_ ## _name ## _slab) reserved; \
- FR_DLIST_HEAD(fr_ ## _name ## _slab) avail; \
+ FR_DLIST_HEAD(_name ## _slab) reserved; \
+ FR_DLIST_HEAD(_name ## _slab) avail; \
fr_event_list_t *el; \
fr_event_timer_t const *ev; \
fr_slab_config_t config; \
unsigned int in_use; \
unsigned int high_water_mark; \
- fr_ ## _type ## _slab_alloc_t alloc; \
- fr_ ## _type ## _slab_reserve_t reserve; \
+ _type ## _slab_alloc_t alloc; \
+ _type ## _slab_reserve_t reserve; \
void *uctx; \
bool release_reset; \
bool reserve_mru; \
- } fr_ ## _name ## _slab_list_t; \
+ } _name ## _slab_list_t; \
\
typedef struct { \
- FR_DLIST_ENTRY(fr_ ## _name ## _slab) entry; \
- fr_ ## _name ## _slab_list_t *list; \
+ FR_DLIST_ENTRY(_name ## _slab) entry; \
+ _name ## _slab_list_t *list; \
TALLOC_CTX *pool; \
- FR_DLIST_HEAD(fr_ ## _name ## _slab_element) reserved; \
- FR_DLIST_HEAD(fr_ ## _name ## _slab_element) avail; \
- } fr_ ## _name ## _slab_t; \
+ FR_DLIST_HEAD(_name ## _slab_element) reserved; \
+ FR_DLIST_HEAD(_name ## _slab_element) avail; \
+ } _name ## _slab_t; \
\
typedef struct { \
_type elem; \
- FR_DLIST_ENTRY(fr_ ## _name ## _slab_element) entry; \
+ FR_DLIST_ENTRY(_name ## _slab_element) entry; \
bool in_use; \
- fr_ ## _name ## _slab_t *slab; \
- fr_ ## _type ## _slab_free_t free; \
+ _name ## _slab_t *slab; \
+ _type ## _slab_free_t free; \
void *uctx; \
- } fr_ ## _name ## _slab_element_t;
+ } _name ## _slab_element_t;
/** Define type specific wrapper functions for slabs and slab elements
*
* @param[in] _type of structure returned by the reserve function.
*/
#define FR_SLAB_FUNCS(_name, _type) \
- FR_DLIST_FUNCS(fr_ ## _name ## _slab, fr_ ## _name ## _slab_t, entry) \
- FR_DLIST_FUNCS(fr_ ## _name ## _slab_element, fr_ ## _name ## _slab_element_t, entry) \
+ FR_DLIST_FUNCS(_name ## _slab, _name ## _slab_t, entry) \
+ FR_DLIST_FUNCS(_name ## _slab_element, _name ## _slab_element_t, entry) \
\
DIAG_OFF(unused-function) \
/** Timer event for freeing unused slabs \
*/ \
static void _ ## _name ## _slab_cleanup(fr_event_list_t *el, UNUSED fr_time_t now, void *uctx) \
{ \
- fr_ ## _name ## _slab_list_t *slab_list = talloc_get_type_abort(uctx, fr_ ## _name ## _slab_list_t); \
- fr_ ## _name ## _slab_t *slab = NULL, *next_slab = NULL; \
+ _name ## _slab_list_t *slab_list = talloc_get_type_abort(uctx, _name ## _slab_list_t); \
+ _name ## _slab_t *slab = NULL, *next_slab = NULL; \
unsigned int to_clear, cleared = 0; \
to_clear = (slab_list->high_water_mark - slab_list->in_use) / 2; \
if ((slab_list->in_use + to_clear) < slab_list->config.min_elements) \
to_clear = slab_list->high_water_mark - slab_list->config.min_elements; \
if (to_clear < slab_list->config.elements_per_slab) goto finish; \
- slab = fr_ ## _name ## _slab_head(&slab_list->avail); \
+ slab = _name ## _slab_head(&slab_list->avail); \
while (slab) { \
- next_slab = fr_ ## _name ## _slab_next(&slab_list->avail, slab); \
- if (fr_ ## _name ## _slab_element_num_elements(&slab->reserved) > 0) goto next; \
- fr_ ## _name ## _slab_remove(&slab_list->avail, slab); \
- cleared += fr_ ## _name ## _slab_element_num_elements(&slab->avail); \
- to_clear -= fr_ ## _name ## _slab_element_num_elements(&slab->avail); \
- fr_ ## _name ## _slab_element_talloc_free(&slab->avail); \
+ next_slab = _name ## _slab_next(&slab_list->avail, slab); \
+ if (_name ## _slab_element_num_elements(&slab->reserved) > 0) goto next; \
+ _name ## _slab_remove(&slab_list->avail, slab); \
+ cleared += _name ## _slab_element_num_elements(&slab->avail); \
+ to_clear -= _name ## _slab_element_num_elements(&slab->avail); \
+ _name ## _slab_element_talloc_free(&slab->avail); \
talloc_free(slab); \
if (to_clear < slab_list->config.elements_per_slab) break; \
next: \
* @param[in] release_reset Should elements be reset and children freed when the element is released.\
* @param[in] reserve_mru If true, the most recently used element will be returned when an element is reserved. \
*/ \
- static inline CC_HINT(nonnull(2)) int fr_ ## _name ## _slab_list_alloc(TALLOC_CTX *ctx, \
- fr_ ## _name ## _slab_list_t **out, \
+ static inline CC_HINT(nonnull(2)) int _name ## _slab_list_alloc(TALLOC_CTX *ctx, \
+ _name ## _slab_list_t **out, \
fr_event_list_t *el, \
fr_slab_config_t const *config, \
- fr_ ## _type ## _slab_alloc_t alloc, \
- fr_ ## _type ## _slab_reserve_t reserve, \
+ _type ## _slab_alloc_t alloc, \
+ _type ## _slab_reserve_t reserve, \
void *uctx, \
bool release_reset, \
bool reserve_mru) \
{ \
- MEM(*out = talloc_zero(ctx, fr_ ## _name ## _slab_list_t)); \
+ MEM(*out = talloc_zero(ctx, _name ## _slab_list_t)); \
(*out)->el = el; \
(*out)->config = *config; \
if ((*out)->config.elements_per_slab == 0) \
(*out)->uctx = uctx; \
(*out)->release_reset = release_reset; \
(*out)->reserve_mru = reserve_mru; \
- fr_ ## _name ## _slab_init(&(*out)->reserved); \
- fr_ ## _name ## _slab_init(&(*out)->avail); \
+ _name ## _slab_init(&(*out)->reserved); \
+ _name ## _slab_init(&(*out)->avail); \
if (el) (void) fr_event_timer_in(*out, el, &(*out)->ev, config->interval, _ ## _name ## _slab_cleanup, *out); \
return 0; \
} \
* the element is not released before being freed. \
* Also ensure the element is removed from the relevant list. \
*/ \
- static int _ ## _type ## _element_free(fr_ ## _name ## _slab_element_t *element) \
+ static int _ ## _type ## _element_free(_name ## _slab_element_t *element) \
{ \
- fr_ ## _name ## _slab_t *slab; \
+ _name ## _slab_t *slab; \
if (element->in_use && element->free) element->free(( _type *)element, element->uctx); \
if (!element->slab) return 0; \
slab = element->slab; \
if (element->in_use) { \
- fr_ ## _name ## _slab_element_remove(&slab->reserved, element); \
+ _name ## _slab_element_remove(&slab->reserved, element); \
} else { \
- fr_ ## _name ## _slab_element_remove(&slab->avail, element); \
+ _name ## _slab_element_remove(&slab->avail, element); \
} \
return 0; \
} \
* @param[in] slab_list to reserve an element from. \
* @return a slab element. \
*/ \
- static inline CC_HINT(nonnull) _type *fr_ ## _name ## _slab_reserve(fr_ ## _name ## _slab_list_t *slab_list) \
+ static inline CC_HINT(nonnull) _type *_name ## _slab_reserve(_name ## _slab_list_t *slab_list) \
{ \
- fr_ ## _name ## _slab_t *slab; \
- fr_ ## _name ## _slab_element_t *element = NULL; \
+ _name ## _slab_t *slab; \
+ _name ## _slab_element_t *element = NULL; \
\
- slab = slab_list->reserve_mru ? fr_ ## _name ## _slab_tail(&slab_list->avail) : \
- fr_ ## _name ## _slab_head(&slab_list->avail); \
- if (!slab && ((fr_ ## _name ## _slab_num_elements(&slab_list->reserved) * \
+ slab = slab_list->reserve_mru ? _name ## _slab_tail(&slab_list->avail) : \
+ _name ## _slab_head(&slab_list->avail); \
+ if (!slab && ((_name ## _slab_num_elements(&slab_list->reserved) * \
slab_list->config.elements_per_slab) < slab_list->config.max_elements)) { \
- fr_ ## _name ## _slab_element_t *new_element; \
+ _name ## _slab_element_t *new_element; \
unsigned int count, elems; \
size_t elem_size; \
elems = slab_list->config.elements_per_slab * (1 + slab_list->config.num_children); \
- elem_size = slab_list->config.elements_per_slab * (sizeof(fr_ ## _name ## _slab_element_t) + \
+ elem_size = slab_list->config.elements_per_slab * (sizeof(_name ## _slab_element_t) + \
slab_list->config.child_pool_size); \
- MEM(slab = talloc_zero_pooled_object(slab_list, fr_ ## _name ## _slab_t, elems, elem_size)); \
- fr_ ## _name ## _slab_element_init(&slab->avail); \
- fr_ ## _name ## _slab_element_init(&slab->reserved); \
- fr_ ## _name ## _slab_insert_head(&slab_list->avail, slab); \
+ MEM(slab = talloc_zero_pooled_object(slab_list, _name ## _slab_t, elems, elem_size)); \
+ _name ## _slab_element_init(&slab->avail); \
+ _name ## _slab_element_init(&slab->reserved); \
+ _name ## _slab_insert_head(&slab_list->avail, slab); \
slab->list = slab_list; \
for (count = 0; count < slab_list->config.elements_per_slab; count++) { \
if (slab_list->config.num_children > 0) { \
- MEM(new_element = talloc_zero_pooled_object(slab, fr_ ## _name ## _slab_element_t, \
+ MEM(new_element = talloc_zero_pooled_object(slab, _name ## _slab_element_t, \
slab_list->config.num_children, \
slab_list->config.child_pool_size)); \
} else { \
- MEM(new_element = talloc_zero(slab, fr_ ## _name ## _slab_element_t)); \
+ MEM(new_element = talloc_zero(slab, _name ## _slab_element_t)); \
} \
talloc_set_type(new_element, _type); \
talloc_set_destructor(new_element, _ ## _type ## _element_free); \
- fr_ ## _name ## _slab_element_insert_tail(&slab->avail, new_element); \
+ _name ## _slab_element_insert_tail(&slab->avail, new_element); \
new_element->slab = slab; \
} \
/* Initialisation of new elements done after allocation to ensure \
* by the callback may take memory from the pool. \
* Any elements which fail to initialise are freed immediately. */ \
if (slab_list->alloc) { \
- fr_ ## _name ## _slab_element_t *prev = NULL; \
+ _name ## _slab_element_t *prev = NULL; \
new_element = NULL; \
- while ((new_element = fr_ ## _name ## _slab_element_next(&slab->avail, new_element))) { \
+ while ((new_element = _name ## _slab_element_next(&slab->avail, new_element))) { \
if (slab_list->alloc((_type *)new_element, slab_list->uctx) < 0) { \
- prev = fr_ ## _name ## _slab_element_remove(&slab->avail, new_element); \
+ prev = _name ## _slab_element_remove(&slab->avail, new_element); \
talloc_free(new_element); \
new_element = prev; \
continue; \
} \
} \
} \
- slab_list->high_water_mark += fr_ ## _name ## _slab_element_num_elements(&slab->avail); \
+ slab_list->high_water_mark += _name ## _slab_element_num_elements(&slab->avail); \
} \
if (!slab && slab_list->config.at_max_fail) return NULL; \
- if (slab) element = slab_list->reserve_mru ? fr_ ## _name ## _slab_element_pop_tail(&slab->avail) : \
- fr_ ## _name ## _slab_element_pop_head(&slab->avail); \
+ if (slab) element = slab_list->reserve_mru ? _name ## _slab_element_pop_tail(&slab->avail) : \
+ _name ## _slab_element_pop_head(&slab->avail); \
if (element) { \
- fr_ ## _name ## _slab_element_insert_tail(&slab->reserved, element); \
- if (fr_ ## _name ## _slab_element_num_elements(&slab->avail) == 0) { \
- fr_ ## _name ## _slab_remove(&slab_list->avail, slab); \
- fr_ ## _name ## _slab_insert_tail(&slab_list->reserved, slab); \
+ _name ## _slab_element_insert_tail(&slab->reserved, element); \
+ if (_name ## _slab_element_num_elements(&slab->avail) == 0) { \
+ _name ## _slab_remove(&slab_list->avail, slab); \
+ _name ## _slab_insert_tail(&slab_list->reserved, slab); \
} \
element->in_use = true; \
slab_list->in_use++; \
} else { \
- MEM(element = talloc_zero(slab_list, fr_ ## _name ## _slab_element_t)); \
+ MEM(element = talloc_zero(slab_list, _name ## _slab_element_t)); \
talloc_set_type(element, _type); \
talloc_set_destructor(element, _ ## _type ## _element_free); \
if (slab_list->alloc) slab_list->alloc((_type *)element, slab_list->uctx); \
* @param[in] func Function to attach. \
* @param[in] uctx to be passed to func. \
*/ \
- static inline CC_HINT(nonnull(1,2)) void fr_ ## _name ## _slab_element_set_destructor(_type *elem, fr_ ## _type ## _slab_free_t func, void *uctx) \
+ static inline CC_HINT(nonnull(1,2)) void _name ## _slab_element_set_destructor(_type *elem, _type ## _slab_free_t func, void *uctx) \
{ \
- fr_ ## _name ## _slab_element_t *element = (fr_ ## _name ## _slab_element_t *)elem; \
+ _name ## _slab_element_t *element = (_name ## _slab_element_t *)elem; \
element->free = func; \
element->uctx = uctx; \
} \
* \
* @param[in] elem to release. \
*/ \
- static inline CC_HINT(nonnull) void fr_ ## _name ## _slab_release(_type *elem) \
+ static inline CC_HINT(nonnull) void _name ## _slab_release(_type *elem) \
{ \
- fr_ ## _name ## _slab_element_t *element = (fr_ ## _name ## _slab_element_t *)elem; \
- fr_ ## _name ## _slab_t *slab = element->slab; \
+ _name ## _slab_element_t *element = (_name ## _slab_element_t *)elem; \
+ _name ## _slab_t *slab = element->slab; \
if (element->free) element->free(elem, element->uctx); \
if (slab) { \
- fr_ ## _name ## _slab_list_t *slab_list; \
+ _name ## _slab_list_t *slab_list; \
slab_list = slab->list; \
- fr_ ## _name ## _slab_element_remove(&slab->reserved, element); \
+ _name ## _slab_element_remove(&slab->reserved, element); \
if (slab_list->release_reset){ \
talloc_free_children(element); \
memset(&element->elem, 0, sizeof(_type)); \
element->free = NULL; \
element->uctx = NULL; \
} \
- fr_ ## _name ## _slab_element_insert_tail(&slab->avail, element); \
- if (fr_ ## _name ## _slab_element_num_elements(&slab->avail) == 1) { \
- fr_ ## _name ## _slab_remove(&slab_list->reserved, slab); \
- fr_ ## _name ## _slab_insert_tail(&slab_list->avail, slab); \
+ _name ## _slab_element_insert_tail(&slab->avail, element); \
+ if (_name ## _slab_element_num_elements(&slab->avail) == 1) { \
+ _name ## _slab_remove(&slab_list->reserved, slab); \
+ _name ## _slab_insert_tail(&slab_list->avail, slab); \
} \
slab_list->in_use--; \
element->in_use = false; \
talloc_free(element); \
} \
\
- static inline CC_HINT(nonnull) unsigned int fr_ ## _name ## _slab_num_elements_used(fr_ ## _name ## _slab_list_t *slab_list) \
+ static inline CC_HINT(nonnull) unsigned int _name ## _slab_num_elements_used(_name ## _slab_list_t *slab_list) \
{ \
return slab_list->in_use; \
} \
\
- static inline CC_HINT(nonnull) unsigned int fr_ ## _name ## _slab_num_allocated(fr_ ## _name ## _slab_list_t *slab_list) \
+ static inline CC_HINT(nonnull) unsigned int _name ## _slab_num_allocated(_name ## _slab_list_t *slab_list) \
{ \
- return fr_ ## _name ## _slab_num_elements(&slab_list->reserved) + \
- fr_ ## _name ## _slab_num_elements(&slab_list->avail); \
+ return _name ## _slab_num_elements(&slab_list->reserved) + \
+ _name ## _slab_num_elements(&slab_list->avail); \
} \
DIAG_ON(unused-function)
*/
static void test_alloc(void)
{
- fr_test_slab_list_t *test_slab_list;
+ test_slab_list_t *test_slab_list;
test_element_t *test_elements[5];
test_uctx_t test_uctx, test_uctx2;
int ret = -1;
/*
* Each slab will contain 2 elements, maximum of 4 elements allocated from slabs.
*/
- ret = fr_test_slab_list_alloc(NULL, &test_slab_list, NULL, &def_slab_config, NULL, NULL, NULL, true, false);
+ ret = test_slab_list_alloc(NULL, &test_slab_list, NULL, &def_slab_config, NULL, NULL, NULL, true, false);
TEST_CHECK(ret == 0);
TEST_CHECK(test_slab_list != NULL);
if (!test_slab_list) return;
- test_elements[0] = fr_test_slab_reserve(test_slab_list);
+ test_elements[0] = test_slab_reserve(test_slab_list);
TEST_CHECK(test_elements[0] != NULL);
- TEST_CHECK_RET(fr_test_slab_num_allocated(test_slab_list), 1);
- TEST_CHECK_RET(fr_test_slab_num_elements_used(test_slab_list), 1);
+ TEST_CHECK_RET(test_slab_num_allocated(test_slab_list), 1);
+ TEST_CHECK_RET(test_slab_num_elements_used(test_slab_list), 1);
test_uctx.count = 0;
test_uctx2.count = 0;
/* "if" to keep clang scan happy */
if (test_elements[0]) test_elements[0]->name = talloc_strdup(test_elements[0], "Hello there");
- if (test_elements[0]) fr_test_slab_element_set_destructor(test_elements[0], test_element_free, &test_uctx);
+ if (test_elements[0]) test_slab_element_set_destructor(test_elements[0], test_element_free, &test_uctx);
- test_elements[1] = fr_test_slab_reserve(test_slab_list);
+ test_elements[1] = test_slab_reserve(test_slab_list);
TEST_CHECK(test_elements[1] != NULL);
TEST_CHECK(test_elements[1] != test_elements[0]);
- TEST_CHECK_RET(fr_test_slab_num_allocated(test_slab_list), 1);
- TEST_CHECK_RET(fr_test_slab_num_elements_used(test_slab_list), 2);
+ TEST_CHECK_RET(test_slab_num_allocated(test_slab_list), 1);
+ TEST_CHECK_RET(test_slab_num_elements_used(test_slab_list), 2);
/* This will cause a second slab to be allocated */
- test_elements[2] = fr_test_slab_reserve(test_slab_list);
+ test_elements[2] = test_slab_reserve(test_slab_list);
TEST_CHECK(test_elements[2] != NULL);
if (test_elements[2]) test_elements[2]->name = talloc_strdup(test_elements[2], "Hello there testing");
- if (test_elements[2]) fr_test_slab_element_set_destructor(test_elements[2], test_element_free, &test_uctx2);
- TEST_CHECK_RET(fr_test_slab_num_allocated(test_slab_list), 2);
- TEST_CHECK_RET(fr_test_slab_num_elements_used(test_slab_list), 3);
+ if (test_elements[2]) test_slab_element_set_destructor(test_elements[2], test_element_free, &test_uctx2);
+ TEST_CHECK_RET(test_slab_num_allocated(test_slab_list), 2);
+ TEST_CHECK_RET(test_slab_num_elements_used(test_slab_list), 3);
- test_elements[3] = fr_test_slab_reserve(test_slab_list);
+ test_elements[3] = test_slab_reserve(test_slab_list);
TEST_CHECK(test_elements[3] != NULL);
- TEST_CHECK_RET(fr_test_slab_num_allocated(test_slab_list), 2);
- TEST_CHECK_RET(fr_test_slab_num_elements_used(test_slab_list), 4);
+ TEST_CHECK_RET(test_slab_num_allocated(test_slab_list), 2);
+ TEST_CHECK_RET(test_slab_num_elements_used(test_slab_list), 4);
/* This is more elements than max_elements */
- test_elements[4] = fr_test_slab_reserve(test_slab_list);
+ test_elements[4] = test_slab_reserve(test_slab_list);
TEST_CHECK(test_elements[4] != NULL);
/* Allocations beyond the maximum do not amend the slab stats */
- TEST_CHECK_RET(fr_test_slab_num_allocated(test_slab_list), 2);
- TEST_CHECK_RET(fr_test_slab_num_elements_used(test_slab_list), 4);
+ TEST_CHECK_RET(test_slab_num_allocated(test_slab_list), 2);
+ TEST_CHECK_RET(test_slab_num_elements_used(test_slab_list), 4);
- if (test_elements[0]) fr_test_slab_release(test_elements[0]);
+ if (test_elements[0]) test_slab_release(test_elements[0]);
TEST_CHECK(test_uctx.count == 11);
- TEST_CHECK_RET(fr_test_slab_num_allocated(test_slab_list), 2);
- TEST_CHECK_RET(fr_test_slab_num_elements_used(test_slab_list), 3);
+ TEST_CHECK_RET(test_slab_num_allocated(test_slab_list), 2);
+ TEST_CHECK_RET(test_slab_num_elements_used(test_slab_list), 3);
- if (test_elements[1]) fr_test_slab_release(test_elements[1]);
- TEST_CHECK_RET(fr_test_slab_num_allocated(test_slab_list), 2);
- TEST_CHECK_RET(fr_test_slab_num_elements_used(test_slab_list), 2);
+ if (test_elements[1]) test_slab_release(test_elements[1]);
+ TEST_CHECK_RET(test_slab_num_allocated(test_slab_list), 2);
+ TEST_CHECK_RET(test_slab_num_elements_used(test_slab_list), 2);
- if (test_elements[2]) fr_test_slab_release(test_elements[2]);
+ if (test_elements[2]) test_slab_release(test_elements[2]);
TEST_CHECK(test_uctx2.count == 19);
- TEST_CHECK_RET(fr_test_slab_num_allocated(test_slab_list), 2);
- TEST_CHECK_RET(fr_test_slab_num_elements_used(test_slab_list), 1);
+ TEST_CHECK_RET(test_slab_num_allocated(test_slab_list), 2);
+ TEST_CHECK_RET(test_slab_num_elements_used(test_slab_list), 1);
talloc_free(test_slab_list);
}
*/
static void test_alloc_fail(void)
{
- fr_test_slab_list_t *test_slab_list;
+ test_slab_list_t *test_slab_list;
test_element_t *test_elements[5];
int ret = -1;
fr_slab_config_t slab_config = def_slab_config;
* Each slab will contain 2 elements, maximum of 4 elements allocated from slabs.
*/
slab_config.at_max_fail = true;
- ret = fr_test_slab_list_alloc(NULL, &test_slab_list, NULL, &slab_config, NULL, NULL, NULL, true, false);
+ ret = test_slab_list_alloc(NULL, &test_slab_list, NULL, &slab_config, NULL, NULL, NULL, true, false);
TEST_CHECK(ret == 0);
TEST_CHECK(test_slab_list != NULL);
if (!test_slab_list) return;
- test_elements[0] = fr_test_slab_reserve(test_slab_list);
+ test_elements[0] = test_slab_reserve(test_slab_list);
TEST_CHECK(test_elements[0] != NULL);
- TEST_CHECK_RET(fr_test_slab_num_allocated(test_slab_list), 1);
- TEST_CHECK_RET(fr_test_slab_num_elements_used(test_slab_list), 1);
+ TEST_CHECK_RET(test_slab_num_allocated(test_slab_list), 1);
+ TEST_CHECK_RET(test_slab_num_elements_used(test_slab_list), 1);
- test_elements[1] = fr_test_slab_reserve(test_slab_list);
- test_elements[2] = fr_test_slab_reserve(test_slab_list);
- test_elements[3] = fr_test_slab_reserve(test_slab_list);
+ test_elements[1] = test_slab_reserve(test_slab_list);
+ test_elements[2] = test_slab_reserve(test_slab_list);
+ test_elements[3] = test_slab_reserve(test_slab_list);
TEST_CHECK(test_elements[3] != NULL);
- TEST_CHECK_RET(fr_test_slab_num_allocated(test_slab_list), 2);
- TEST_CHECK_RET(fr_test_slab_num_elements_used(test_slab_list), 4);
+ TEST_CHECK_RET(test_slab_num_allocated(test_slab_list), 2);
+ TEST_CHECK_RET(test_slab_num_elements_used(test_slab_list), 4);
/* This is more elements than max_elements */
- test_elements[4] = fr_test_slab_reserve(test_slab_list);
+ test_elements[4] = test_slab_reserve(test_slab_list);
TEST_CHECK(test_elements[4] == NULL);
- TEST_CHECK_RET(fr_test_slab_num_allocated(test_slab_list), 2);
- TEST_CHECK_RET(fr_test_slab_num_elements_used(test_slab_list), 4);
+ TEST_CHECK_RET(test_slab_num_allocated(test_slab_list), 2);
+ TEST_CHECK_RET(test_slab_num_elements_used(test_slab_list), 4);
talloc_free(test_slab_list);
}
*/
static void test_reuse_reset(void)
{
- fr_test_slab_list_t *test_slab_list;
+ test_slab_list_t *test_slab_list;
test_element_t *test_elements[5];
test_uctx_t test_uctx;
int ret = -1;
- ret = fr_test_slab_list_alloc(NULL, &test_slab_list, NULL, &def_slab_config, NULL, NULL, NULL, true, false);
+ ret = test_slab_list_alloc(NULL, &test_slab_list, NULL, &def_slab_config, NULL, NULL, NULL, true, false);
TEST_CHECK(ret == 0);
TEST_CHECK(test_slab_list != NULL);
if (!test_slab_list) return;
- test_elements[0] = fr_test_slab_reserve(test_slab_list);
+ test_elements[0] = test_slab_reserve(test_slab_list);
TEST_CHECK(test_elements[0] != NULL);
- TEST_CHECK_RET(fr_test_slab_num_allocated(test_slab_list), 1);
- TEST_CHECK_RET(fr_test_slab_num_elements_used(test_slab_list), 1);
+ TEST_CHECK_RET(test_slab_num_allocated(test_slab_list), 1);
+ TEST_CHECK_RET(test_slab_num_elements_used(test_slab_list), 1);
test_uctx.count = 0;
if (test_elements[0]) test_elements[0]->name = talloc_strdup(test_elements[0], "Hello there");
- if (test_elements[0]) fr_test_slab_element_set_destructor(test_elements[0], test_element_free, &test_uctx);
+ if (test_elements[0]) test_slab_element_set_destructor(test_elements[0], test_element_free, &test_uctx);
- test_elements[1] = fr_test_slab_reserve(test_slab_list);
+ test_elements[1] = test_slab_reserve(test_slab_list);
TEST_CHECK(test_elements[1] != NULL);
TEST_CHECK(test_elements[1] != test_elements[0]);
- test_elements[2] = fr_test_slab_reserve(test_slab_list);
+ test_elements[2] = test_slab_reserve(test_slab_list);
TEST_CHECK(test_elements[2] != NULL);
- test_elements[3] = fr_test_slab_reserve(test_slab_list);
+ test_elements[3] = test_slab_reserve(test_slab_list);
TEST_CHECK(test_elements[3] != NULL);
- if (test_elements[0]) fr_test_slab_release(test_elements[0]);
+ if (test_elements[0]) test_slab_release(test_elements[0]);
TEST_CHECK(test_uctx.count == 11);
/*
* reserving another should grab that first one again, but
* with the entry memset to zero.
*/
- test_elements[4] = fr_test_slab_reserve(test_slab_list);
+ test_elements[4] = test_slab_reserve(test_slab_list);
TEST_CHECK(test_elements[4] != NULL);
TEST_CHECK(test_elements[4] == test_elements[0]);
if (test_elements[4]) TEST_CHECK(test_elements[4]->name == NULL);
- TEST_CHECK_RET(fr_test_slab_num_allocated(test_slab_list), 2);
- TEST_CHECK_RET(fr_test_slab_num_elements_used(test_slab_list), 4);
+ TEST_CHECK_RET(test_slab_num_allocated(test_slab_list), 2);
+ TEST_CHECK_RET(test_slab_num_elements_used(test_slab_list), 4);
/*
* Releasing the first element should reset the destructor
* of the initial release.
*/
if (test_elements[4]) test_elements[4]->name = talloc_strdup(test_elements[4], "Different length string");
- if (test_elements[4]) fr_test_slab_release(test_elements[4]);
+ if (test_elements[4]) test_slab_release(test_elements[4]);
TEST_CHECK(test_uctx.count == 11);
talloc_free(test_slab_list);
*/
static void test_reuse_noreset(void)
{
- fr_test_slab_list_t *test_slab_list;
+ test_slab_list_t *test_slab_list;
test_element_t *test_elements[3];
test_uctx_t test_uctx;
int ret = -1;
- ret = fr_test_slab_list_alloc(NULL, &test_slab_list, NULL, &def_slab_config, NULL, NULL, NULL, false, false);
+ ret = test_slab_list_alloc(NULL, &test_slab_list, NULL, &def_slab_config, NULL, NULL, NULL, false, false);
TEST_CHECK(ret == 0);
TEST_CHECK(test_slab_list != NULL);
if (!test_slab_list) return;
- test_elements[0] = fr_test_slab_reserve(test_slab_list);
+ test_elements[0] = test_slab_reserve(test_slab_list);
TEST_CHECK(test_elements[0] != NULL);
- TEST_CHECK_RET(fr_test_slab_num_allocated(test_slab_list), 1);
- TEST_CHECK_RET(fr_test_slab_num_elements_used(test_slab_list), 1);
+ TEST_CHECK_RET(test_slab_num_allocated(test_slab_list), 1);
+ TEST_CHECK_RET(test_slab_num_elements_used(test_slab_list), 1);
test_uctx.count = 0;
if (test_elements[0]) test_elements[0]->name = talloc_strdup(test_elements[0], "Hello there");
- if (test_elements[0]) fr_test_slab_element_set_destructor(test_elements[0], test_element_free, &test_uctx);
+ if (test_elements[0]) test_slab_element_set_destructor(test_elements[0], test_element_free, &test_uctx);
- test_elements[1] = fr_test_slab_reserve(test_slab_list);
+ test_elements[1] = test_slab_reserve(test_slab_list);
TEST_CHECK(test_elements[1] != NULL);
TEST_CHECK(test_elements[1] != test_elements[0]);
- if (test_elements[0]) fr_test_slab_release(test_elements[0]);
+ if (test_elements[0]) test_slab_release(test_elements[0]);
TEST_CHECK(test_uctx.count == 11);
/*
* reserving another should grab that first one again.
* Since no reset was done, the element should be as it was before.
*/
- test_elements[2] = fr_test_slab_reserve(test_slab_list);
+ test_elements[2] = test_slab_reserve(test_slab_list);
TEST_CHECK(test_elements[2] != NULL);
TEST_CHECK(test_elements[2] == test_elements[0]);
if (test_elements[0] && test_elements[2]) TEST_CHECK(test_elements[2]->name == test_elements[0]->name);
*/
if (test_elements[2]) talloc_free(test_elements[2]->name);
if (test_elements[2]) test_elements[2]->name = talloc_strdup(test_elements[2], "Different length string");
- if (test_elements[2]) fr_test_slab_release(test_elements[2]);
+ if (test_elements[2]) test_slab_release(test_elements[2]);
TEST_CHECK(test_uctx.count == 23);
talloc_free(test_slab_list);
*/
static void test_reserve_mru(void)
{
- fr_test_slab_list_t *test_slab_list;
+ test_slab_list_t *test_slab_list;
test_element_t *test_elements[2];
int ret = -1;
* First use a slab list with reserve_mru = false to verify that the two reservations
* result in different elements being returned
*/
- ret = fr_test_slab_list_alloc(NULL, &test_slab_list, NULL, &def_slab_config, NULL, NULL, NULL, true, false);
+ ret = test_slab_list_alloc(NULL, &test_slab_list, NULL, &def_slab_config, NULL, NULL, NULL, true, false);
TEST_CHECK(ret == 0);
TEST_CHECK(test_slab_list != NULL);
if (!test_slab_list) return;
- test_elements[0] = fr_test_slab_reserve(test_slab_list);
+ test_elements[0] = test_slab_reserve(test_slab_list);
TEST_CHECK(test_elements[0] != NULL);
- if (test_elements[0]) fr_test_slab_release(test_elements[0]);
+ if (test_elements[0]) test_slab_release(test_elements[0]);
- test_elements[1] = fr_test_slab_reserve(test_slab_list);
+ test_elements[1] = test_slab_reserve(test_slab_list);
TEST_CHECK(test_elements[1] != NULL);
TEST_CHECK(test_elements[0] != test_elements[1]);
/*
* Now use a slab list with reserve_mru = true
*/
- ret = fr_test_slab_list_alloc(NULL, &test_slab_list, NULL, &def_slab_config, NULL, NULL, NULL, true, true);
+ ret = test_slab_list_alloc(NULL, &test_slab_list, NULL, &def_slab_config, NULL, NULL, NULL, true, true);
TEST_CHECK(ret == 0);
TEST_CHECK(test_slab_list != NULL);
if (!test_slab_list) return;
- test_elements[0] = fr_test_slab_reserve(test_slab_list);
+ test_elements[0] = test_slab_reserve(test_slab_list);
TEST_CHECK(test_elements[0] != NULL);
- if (test_elements[0]) fr_test_slab_release(test_elements[0]);
+ if (test_elements[0]) test_slab_release(test_elements[0]);
- test_elements[1] = fr_test_slab_reserve(test_slab_list);
+ test_elements[1] = test_slab_reserve(test_slab_list);
TEST_CHECK(test_elements[1] != NULL);
TEST_CHECK(test_elements[0] == test_elements[1]);
*/
static void test_free(void)
{
- fr_test_slab_list_t *test_slab_list;
+ test_slab_list_t *test_slab_list;
test_element_t *test_element;
test_uctx_t test_uctx;
int ret = -1;
- ret = fr_test_slab_list_alloc(NULL, &test_slab_list, NULL, &def_slab_config, NULL, NULL, NULL, true, false);
+ ret = test_slab_list_alloc(NULL, &test_slab_list, NULL, &def_slab_config, NULL, NULL, NULL, true, false);
TEST_CHECK(ret == 0);
TEST_CHECK(test_slab_list != NULL);
if (!test_slab_list) return;
- test_element = fr_test_slab_reserve(test_slab_list);
+ test_element = test_slab_reserve(test_slab_list);
TEST_CHECK(test_element != NULL);
test_uctx.count = 0;
if (test_element) test_element->name = talloc_strdup(test_element, "Hello there");
- if (test_element) fr_test_slab_element_set_destructor(test_element, test_element_free, &test_uctx);
+ if (test_element) test_slab_element_set_destructor(test_element, test_element_free, &test_uctx);
if (test_element) talloc_free(test_element);
TEST_CHECK(test_uctx.count == 11);
*/
static void test_init(void)
{
- fr_test_slab_list_t *test_slab_list;
+ test_slab_list_t *test_slab_list;
test_element_t *test_elements[2];
test_conf_t test_conf = { .initial = 10 };
int ret = -1;
fr_slab_config_t slab_config = def_slab_config;
slab_config.elements_per_slab = 1;
- ret = fr_test_slab_list_alloc(NULL, &test_slab_list, NULL, &slab_config, test_element_alloc, NULL, &test_conf, false, false);
+ ret = test_slab_list_alloc(NULL, &test_slab_list, NULL, &slab_config, test_element_alloc, NULL, &test_conf, false, false);
TEST_CHECK(ret == 0);
TEST_CHECK(test_slab_list != NULL);
if (!test_slab_list) return;
- test_elements[0] = fr_test_slab_reserve(test_slab_list);
+ test_elements[0] = test_slab_reserve(test_slab_list);
TEST_CHECK(test_elements[0] != NULL);
TEST_CHECK(test_elements[0] && (test_elements[0]->num == 10));
*/
if (test_elements[0]) {
test_elements[0]->num = 5;
- fr_test_slab_release(test_elements[0]);
+ test_slab_release(test_elements[0]);
}
/*
* Re-reserve and check element is unchanged.
*/
- test_elements[1] = fr_test_slab_reserve(test_slab_list);
+ test_elements[1] = test_slab_reserve(test_slab_list);
TEST_CHECK(test_elements[1] != NULL);
TEST_CHECK(test_elements[1] == test_elements[0]);
if (test_elements[1]) TEST_CHECK(test_elements[1]->num == 5);
*/
static void test_reserve(void)
{
- fr_test_slab_list_t *test_slab_list;
+ test_slab_list_t *test_slab_list;
test_element_t *test_elements[2];
test_conf_t test_conf = { .initial = 10 };
int ret = -1;
fr_slab_config_t slab_config = def_slab_config;
slab_config.elements_per_slab = 1;
- ret = fr_test_slab_list_alloc(NULL, &test_slab_list, NULL, &slab_config, NULL, test_element_alloc, &test_conf, false, false);
+ ret = test_slab_list_alloc(NULL, &test_slab_list, NULL, &slab_config, NULL, test_element_alloc, &test_conf, false, false);
TEST_CHECK(ret == 0);
TEST_CHECK(test_slab_list != NULL);
if (!test_slab_list) return;
- test_elements[0] = fr_test_slab_reserve(test_slab_list);
+ test_elements[0] = test_slab_reserve(test_slab_list);
TEST_CHECK(test_elements[0] != NULL);
TEST_CHECK(test_elements[0] && (test_elements[0]->num == 10));
*/
if (test_elements[0]) {
test_elements[0]->num = 5;
- fr_test_slab_release(test_elements[0]);
+ test_slab_release(test_elements[0]);
}
/*
* Re-reserve and check element is re-initialised.
*/
- test_elements[1] = fr_test_slab_reserve(test_slab_list);
+ test_elements[1] = test_slab_reserve(test_slab_list);
TEST_CHECK(test_elements[1] != NULL);
TEST_CHECK(test_elements[1] == test_elements[0]);
if (test_elements[1]) TEST_CHECK(test_elements[1]->num == 10);
*/
static void test_init_reserve(void)
{
- fr_test_slab_list_t *test_slab_list;
+ test_slab_list_t *test_slab_list;
test_element_t *test_elements[2];
test_conf_t test_conf = { .initial = 10 };
int ret = -1;
fr_slab_config_t slab_config = def_slab_config;
slab_config.elements_per_slab = 1;
- ret = fr_test_slab_list_alloc(NULL, &test_slab_list, NULL, &slab_config, test_element_alloc, test_element_reserve, &test_conf, false, false);
+ ret = test_slab_list_alloc(NULL, &test_slab_list, NULL, &slab_config, test_element_alloc, test_element_reserve, &test_conf, false, false);
TEST_CHECK(ret == 0);
TEST_CHECK(test_slab_list != NULL);
if (!test_slab_list) return;
- test_elements[0] = fr_test_slab_reserve(test_slab_list);
+ test_elements[0] = test_slab_reserve(test_slab_list);
TEST_CHECK(test_elements[0] != NULL);
TEST_CHECK(test_elements[0] && (test_elements[0]->num == 20));
*/
if (test_elements[0]) {
test_elements[0]->num = 5;
- fr_test_slab_release(test_elements[0]);
+ test_slab_release(test_elements[0]);
}
/*
* Re-reserve and check reset callback is run.
*/
- test_elements[1] = fr_test_slab_reserve(test_slab_list);
+ test_elements[1] = test_slab_reserve(test_slab_list);
TEST_CHECK(test_elements[1] != NULL);
TEST_CHECK(test_elements[1] == test_elements[0]);
if (test_elements[1]) TEST_CHECK(test_elements[1]->num == 20);
{
TALLOC_CTX *ctx = talloc_init_const("test");
fr_event_list_t *el;
- fr_test_slab_list_t *test_slab_list;
+ test_slab_list_t *test_slab_list;
test_element_t *test_elements[6];
int i, events, ret = -1;
fr_slab_config_t slab_config = def_slab_config;
fr_event_list_set_time_func(el, test_time);
slab_config.max_elements = 6;
- ret = fr_test_slab_list_alloc(NULL, &test_slab_list, el, &slab_config, NULL, NULL, NULL, true, false);
+ ret = test_slab_list_alloc(NULL, &test_slab_list, el, &slab_config, NULL, NULL, NULL, true, false);
TEST_CHECK(ret == 0);
TEST_CHECK(test_slab_list != NULL);
if (!test_slab_list) return;
* Allocate all the slab elements
*/
for (i = 0; i < 6; i++) {
- test_elements[i] = fr_test_slab_reserve(test_slab_list);
+ test_elements[i] = test_slab_reserve(test_slab_list);
TEST_CHECK(test_elements[i] != NULL);
}
- TEST_CHECK_RET(fr_test_slab_num_allocated(test_slab_list), 3);
- TEST_CHECK_RET(fr_test_slab_num_elements_used(test_slab_list), 6);
+ TEST_CHECK_RET(test_slab_num_allocated(test_slab_list), 3);
+ TEST_CHECK_RET(test_slab_num_elements_used(test_slab_list), 6);
/*
* Release four of the six elements
*/
for (i = 0; i < 4; i++) {
- fr_test_slab_release(test_elements[i]);
+ test_slab_release(test_elements[i]);
}
- TEST_CHECK_RET(fr_test_slab_num_allocated(test_slab_list), 3);
- TEST_CHECK_RET(fr_test_slab_num_elements_used(test_slab_list), 2);
+ TEST_CHECK_RET(test_slab_num_allocated(test_slab_list), 3);
+ TEST_CHECK_RET(test_slab_num_elements_used(test_slab_list), 2);
/*
* Running clearup should free one slab - half of the
events = fr_event_corral(el, test_time_base, true);
TEST_CHECK(events == 1);
fr_event_service(el);
- TEST_CHECK_RET(fr_test_slab_num_allocated(test_slab_list), 2);
- TEST_CHECK_RET(fr_test_slab_num_elements_used(test_slab_list), 2);
+ TEST_CHECK_RET(test_slab_num_allocated(test_slab_list), 2);
+ TEST_CHECK_RET(test_slab_num_elements_used(test_slab_list), 2);
talloc_free(test_slab_list);
talloc_free(ctx);
{
TALLOC_CTX *ctx = talloc_init_const("test");
fr_event_list_t *el;
- fr_test_slab_list_t *test_slab_list;
+ test_slab_list_t *test_slab_list;
test_element_t *test_elements[20];
int i, events, ret = -1;
fr_slab_config_t slab_config = def_slab_config;
slab_config.min_elements = 16;
slab_config.max_elements = 20;
- ret = fr_test_slab_list_alloc(NULL, &test_slab_list, el, &slab_config, NULL, NULL, NULL, true, false);
+ ret = test_slab_list_alloc(NULL, &test_slab_list, el, &slab_config, NULL, NULL, NULL, true, false);
TEST_CHECK(ret == 0);
TEST_CHECK(test_slab_list != NULL);
if (!test_slab_list) return;
* Allocate all the slab elements
*/
for (i = 0; i < 20; i++) {
- test_elements[i] = fr_test_slab_reserve(test_slab_list);
+ test_elements[i] = test_slab_reserve(test_slab_list);
TEST_CHECK(test_elements[i] != NULL);
}
- TEST_CHECK_RET(fr_test_slab_num_allocated(test_slab_list), 10);
- TEST_CHECK_RET(fr_test_slab_num_elements_used(test_slab_list), 20);
+ TEST_CHECK_RET(test_slab_num_allocated(test_slab_list), 10);
+ TEST_CHECK_RET(test_slab_num_elements_used(test_slab_list), 20);
/*
* Release all of the elements
*/
for (i = 0; i < 20; i++) {
- fr_test_slab_release(test_elements[i]);
+ test_slab_release(test_elements[i]);
}
- TEST_CHECK_RET(fr_test_slab_num_allocated(test_slab_list), 10);
- TEST_CHECK_RET(fr_test_slab_num_elements_used(test_slab_list), 0);
+ TEST_CHECK_RET(test_slab_num_allocated(test_slab_list), 10);
+ TEST_CHECK_RET(test_slab_num_elements_used(test_slab_list), 0);
/*
* Running clearup should free two slabs - the minimum element
events = fr_event_corral(el, test_time_base, true);
TEST_CHECK(events == 1);
fr_event_service(el);
- TEST_CHECK_RET(fr_test_slab_num_allocated(test_slab_list), 8);
- TEST_CHECK_RET(fr_test_slab_num_elements_used(test_slab_list), 0);
+ TEST_CHECK_RET(test_slab_num_allocated(test_slab_list), 8);
+ TEST_CHECK_RET(test_slab_num_elements_used(test_slab_list), 0);
/*
* Re-run the event - no more slabs should be cleared
events = fr_event_corral(el, test_time_base, true);
TEST_CHECK(events == 1);
fr_event_service(el);
- TEST_CHECK_RET(fr_test_slab_num_allocated(test_slab_list), 8);
- TEST_CHECK_RET(fr_test_slab_num_elements_used(test_slab_list), 0);
+ TEST_CHECK_RET(test_slab_num_allocated(test_slab_list), 8);
+ TEST_CHECK_RET(test_slab_num_elements_used(test_slab_list), 0);
talloc_free(test_slab_list);
talloc_free(ctx);
{
TALLOC_CTX *ctx = talloc_init_const("test");
fr_event_list_t *el;
- fr_test_slab_list_t *test_slab_list;
+ test_slab_list_t *test_slab_list;
test_element_t *test_elements[20];
int i, events, ret = -1;
fr_slab_config_t slab_config = def_slab_config;
slab_config.min_elements = 0;
slab_config.max_elements = 20;
- ret = fr_test_slab_list_alloc(NULL, &test_slab_list, el, &slab_config, NULL, NULL, NULL, true, false);
+ ret = test_slab_list_alloc(NULL, &test_slab_list, el, &slab_config, NULL, NULL, NULL, true, false);
TEST_CHECK(ret == 0);
TEST_CHECK(test_slab_list != NULL);
if (!test_slab_list) return;
* Allocate all the slab elements
*/
for (i = 0; i < 20; i++) {
- test_elements[i] = fr_test_slab_reserve(test_slab_list);
+ test_elements[i] = test_slab_reserve(test_slab_list);
TEST_CHECK(test_elements[i] != NULL);
}
- TEST_CHECK_RET(fr_test_slab_num_allocated(test_slab_list), 10);
- TEST_CHECK_RET(fr_test_slab_num_elements_used(test_slab_list), 20);
+ TEST_CHECK_RET(test_slab_num_allocated(test_slab_list), 10);
+ TEST_CHECK_RET(test_slab_num_elements_used(test_slab_list), 20);
/*
* Release all of the elements
*/
for (i = 0; i < 20; i++) {
- fr_test_slab_release(test_elements[i]);
+ test_slab_release(test_elements[i]);
}
- TEST_CHECK_RET(fr_test_slab_num_allocated(test_slab_list), 10);
- TEST_CHECK_RET(fr_test_slab_num_elements_used(test_slab_list), 0);
+ TEST_CHECK_RET(test_slab_num_allocated(test_slab_list), 10);
+ TEST_CHECK_RET(test_slab_num_elements_used(test_slab_list), 0);
/*
* Running clearup should free five slabs (20 - 0) / 2 / 2 = 5
events = fr_event_corral(el, test_time_base, true);
TEST_CHECK(events == 1);
fr_event_service(el);
- TEST_CHECK_RET(fr_test_slab_num_allocated(test_slab_list), 5);
- TEST_CHECK_RET(fr_test_slab_num_elements_used(test_slab_list), 0);
+ TEST_CHECK_RET(test_slab_num_allocated(test_slab_list), 5);
+ TEST_CHECK_RET(test_slab_num_elements_used(test_slab_list), 0);
/*
* Re-run the event - two more slabs should be freed (10 - 0) / 2 / 2 = 2.5
events = fr_event_corral(el, test_time_base, true);
TEST_CHECK(events == 1);
fr_event_service(el);
- TEST_CHECK_RET(fr_test_slab_num_allocated(test_slab_list), 3);
- TEST_CHECK_RET(fr_test_slab_num_elements_used(test_slab_list), 0);
+ TEST_CHECK_RET(test_slab_num_allocated(test_slab_list), 3);
+ TEST_CHECK_RET(test_slab_num_elements_used(test_slab_list), 0);
/*
* Re-run the event - one more slab should be freed (6 - 0) / 2 / 2 = 1.5
events = fr_event_corral(el, test_time_base, true);
TEST_CHECK(events == 1);
fr_event_service(el);
- TEST_CHECK_RET(fr_test_slab_num_allocated(test_slab_list), 2);
- TEST_CHECK_RET(fr_test_slab_num_elements_used(test_slab_list), 0);
+ TEST_CHECK_RET(test_slab_num_allocated(test_slab_list), 2);
+ TEST_CHECK_RET(test_slab_num_elements_used(test_slab_list), 0);
/*
* Re-run the event - one more slab should be freed (4 - 0) / 2 / 2 = 1
events = fr_event_corral(el, test_time_base, true);
TEST_CHECK(events == 1);
fr_event_service(el);
- TEST_CHECK_RET(fr_test_slab_num_allocated(test_slab_list), 1);
- TEST_CHECK_RET(fr_test_slab_num_elements_used(test_slab_list), 0);
+ TEST_CHECK_RET(test_slab_num_allocated(test_slab_list), 1);
+ TEST_CHECK_RET(test_slab_num_elements_used(test_slab_list), 0);
/*
* Re-run the event - no more will be freed as (2 - 0) / 2 / 2 = 0.5
events = fr_event_corral(el, test_time_base, true);
TEST_CHECK(events == 1);
fr_event_service(el);
- TEST_CHECK_RET(fr_test_slab_num_allocated(test_slab_list), 1);
- TEST_CHECK_RET(fr_test_slab_num_elements_used(test_slab_list), 0);
+ TEST_CHECK_RET(test_slab_num_allocated(test_slab_list), 1);
+ TEST_CHECK_RET(test_slab_num_elements_used(test_slab_list), 0);
talloc_free(test_slab_list);
talloc_free(ctx);
{
TALLOC_CTX *ctx = talloc_init_const("test");
fr_event_list_t *el;
- fr_test_slab_list_t *test_slab_list;
+ test_slab_list_t *test_slab_list;
test_element_t *test_elements[20];
int i, events, ret = -1;
fr_slab_config_t slab_config = def_slab_config;
slab_config.min_elements = 0;
slab_config.max_elements = 20;
- ret = fr_test_slab_list_alloc(NULL, &test_slab_list, el, &slab_config, NULL, NULL, NULL, true, false);
+ ret = test_slab_list_alloc(NULL, &test_slab_list, el, &slab_config, NULL, NULL, NULL, true, false);
TEST_CHECK(ret == 0);
TEST_CHECK(test_slab_list != NULL);
if (!test_slab_list) return;
* Allocate all the slab elements
*/
for (i = 0; i < 20; i++) {
- test_elements[i] = fr_test_slab_reserve(test_slab_list);
+ test_elements[i] = test_slab_reserve(test_slab_list);
TEST_CHECK(test_elements[i] != NULL);
}
- TEST_CHECK_RET(fr_test_slab_num_allocated(test_slab_list), 10);
- TEST_CHECK_RET(fr_test_slab_num_elements_used(test_slab_list), 20);
+ TEST_CHECK_RET(test_slab_num_allocated(test_slab_list), 10);
+ TEST_CHECK_RET(test_slab_num_elements_used(test_slab_list), 20);
/*
* Release all of the elements
*/
for (i = 0; i < 20; i++) {
- fr_test_slab_release(test_elements[i]);
+ test_slab_release(test_elements[i]);
}
- TEST_CHECK_RET(fr_test_slab_num_allocated(test_slab_list), 10);
- TEST_CHECK_RET(fr_test_slab_num_elements_used(test_slab_list), 0);
+ TEST_CHECK_RET(test_slab_num_allocated(test_slab_list), 10);
+ TEST_CHECK_RET(test_slab_num_elements_used(test_slab_list), 0);
/*
* Running clearup should free five slabs
events = fr_event_corral(el, test_time_base, true);
TEST_CHECK(events == 1);
fr_event_service(el);
- TEST_CHECK_RET(fr_test_slab_num_allocated(test_slab_list), 5);
- TEST_CHECK_RET(fr_test_slab_num_elements_used(test_slab_list), 0);
+ TEST_CHECK_RET(test_slab_num_allocated(test_slab_list), 5);
+ TEST_CHECK_RET(test_slab_num_elements_used(test_slab_list), 0);
/*
* Allocate all the slab elements
* With new slabs allocated, the slab stats will change
*/
for (i = 0; i < 20; i++) {
- test_elements[i] = fr_test_slab_reserve(test_slab_list);
+ test_elements[i] = test_slab_reserve(test_slab_list);
TEST_CHECK(test_elements[i] != NULL);
}
- TEST_CHECK_RET(fr_test_slab_num_allocated(test_slab_list), 10);
- TEST_CHECK_RET(fr_test_slab_num_elements_used(test_slab_list), 20);
+ TEST_CHECK_RET(test_slab_num_allocated(test_slab_list), 10);
+ TEST_CHECK_RET(test_slab_num_elements_used(test_slab_list), 20);
talloc_free(test_slab_list);
talloc_free(ctx);
static void test_child_alloc(void)
{
- fr_test_slab_list_t *test_slab_list;
+ test_slab_list_t *test_slab_list;
test_element_t *test_elements[2];
int ret = -1;
fr_slab_config_t slab_config = def_slab_config;
slab_config.max_elements = 2;
slab_config.num_children = 1;
slab_config.child_pool_size = 128;
- ret = fr_test_slab_list_alloc(NULL, &test_slab_list, NULL, &slab_config, NULL, NULL, NULL, false, false);
+ ret = test_slab_list_alloc(NULL, &test_slab_list, NULL, &slab_config, NULL, NULL, NULL, false, false);
TEST_CHECK(ret == 0);
TEST_CHECK(test_slab_list != NULL);
if (!test_slab_list) return;
- test_elements[0] = fr_test_slab_reserve(test_slab_list);
+ test_elements[0] = test_slab_reserve(test_slab_list);
TEST_CHECK(test_elements[0] != NULL);
- test_elements[1] = fr_test_slab_reserve(test_slab_list);
+ test_elements[1] = test_slab_reserve(test_slab_list);
TEST_CHECK(test_elements[1] != NULL);
/*