--- a/src/ucx/array_list.c Sun Jul 09 15:14:26 2023 +0200 +++ b/src/ucx/array_list.c Mon Jul 10 18:39:24 2023 +0200 @@ -103,7 +103,7 @@ } #ifndef CX_ARRAY_SWAP_SBO_SIZE -#define CX_ARRAY_SWAP_SBO_SIZE 512 +#define CX_ARRAY_SWAP_SBO_SIZE 128 #endif void cx_array_swap( @@ -169,7 +169,24 @@ static void cx_arl_destructor(struct cx_list_s *list) { cx_array_list *arl = (cx_array_list *) list; + + char *ptr = arl->data; + + if (list->simple_destructor) { + for (size_t i = 0; i < list->size; i++) { + cx_invoke_simple_destructor(list, ptr); + ptr += list->item_size; + } + } + if (list->advanced_destructor) { + for (size_t i = 0; i < list->size; i++) { + cx_invoke_advanced_destructor(list, ptr); + ptr += list->item_size; + } + } + cxFree(list->allocator, arl->data); + cxFree(list->allocator, list); } static size_t cx_arl_insert_array(