@@ -35,39 +35,39 @@ static UTIL_ONCE_FLAG ctl_initialized = UTIL_ONCE_FLAG_INIT;
3535
3636// Disable name ctl for 1.0 release
3737#if 0
38- static umf_result_t CTL_READ_HANDLER (name )(void * ctx ,
39- umf_ctl_query_source_t source ,
40- void * arg , size_t size ,
41- umf_ctl_index_utlist_t * indexes ) {
38+ static umf_result_t CTL_READ_HANDLER (name )(void * ctx ,
39+ umf_ctl_query_source_t source ,
40+ void * arg , size_t size ,
41+ umf_ctl_index_utlist_t * indexes ) {
4242 (void )source , (void )indexes ;
4343
44- disjoint_pool_t * pool = (disjoint_pool_t * )ctx ;
44+ disjoint_pool_t * pool = (disjoint_pool_t * )ctx ;
4545
4646 if (arg == NULL ) {
4747 return UMF_RESULT_ERROR_INVALID_ARGUMENT ;
4848 }
4949
5050 if (size > 0 ) {
51- strncpy ((char * )arg , pool -> params .name , size - 1 );
52- ((char * )arg )[size - 1 ] = '\0' ;
51+ strncpy ((char * )arg , pool -> params .name , size - 1 );
52+ ((char * )arg )[size - 1 ] = '\0' ;
5353 }
5454
5555 return UMF_RESULT_SUCCESS ;
5656}
5757
5858static const struct ctl_argument CTL_ARG (name ) = CTL_ARG_STRING (255 );
5959
60- static umf_result_t CTL_WRITE_HANDLER (name )(void * ctx ,
61- umf_ctl_query_source_t source ,
62- void * arg , size_t size ,
63- umf_ctl_index_utlist_t * indexes ) {
60+ static umf_result_t CTL_WRITE_HANDLER (name )(void * ctx ,
61+ umf_ctl_query_source_t source ,
62+ void * arg , size_t size ,
63+ umf_ctl_index_utlist_t * indexes ) {
6464 (void )source , (void )indexes , (void )size ;
65- disjoint_pool_t * pool = (disjoint_pool_t * )ctx ;
65+ disjoint_pool_t * pool = (disjoint_pool_t * )ctx ;
6666 if (arg == NULL ) {
6767 return UMF_RESULT_ERROR_INVALID_ARGUMENT ;
6868 }
6969
70- strncpy (pool -> params .name , (char * )arg , sizeof (pool -> params .name ) - 1 );
70+ strncpy (pool -> params .name , (char * )arg , sizeof (pool -> params .name ) - 1 );
7171 pool -> params .name [sizeof (pool -> params .name ) - 1 ] = '\0' ;
7272
7373 return UMF_RESULT_SUCCESS ;
@@ -758,9 +758,21 @@ umf_result_t disjoint_pool_initialize(umf_memory_provider_handle_t provider,
758758 disjoint_pool -> provider = provider ;
759759 disjoint_pool -> params = * dp_params ;
760760
761+ * ppPool = (void * )disjoint_pool ;
762+
763+ return UMF_RESULT_SUCCESS ;
764+ }
765+
766+ umf_result_t
767+ disjoint_pool_post_initialize (umf_memory_provider_handle_t provider ,
768+ const void * params , void * ppPool ) {
769+ (void )params ;
770+ disjoint_pool_t * disjoint_pool = (disjoint_pool_t * )ppPool ;
771+
761772 disjoint_pool -> known_slabs = critnib_new (free_slab , NULL );
762773 if (disjoint_pool -> known_slabs == NULL ) {
763- goto err_free_disjoint_pool ;
774+ umf_ba_global_free (disjoint_pool );
775+ return UMF_RESULT_ERROR_OUT_OF_HOST_MEMORY ;
764776 }
765777
766778 // Generate buckets sized such as: 64, 96, 128, 192, ..., CutOff.
@@ -821,8 +833,6 @@ umf_result_t disjoint_pool_initialize(umf_memory_provider_handle_t provider,
821833 disjoint_pool -> provider_min_page_size = 0 ;
822834 }
823835
824- * ppPool = (void * )disjoint_pool ;
825-
826836 return UMF_RESULT_SUCCESS ;
827837
828838err_free_buckets :
@@ -838,10 +848,6 @@ umf_result_t disjoint_pool_initialize(umf_memory_provider_handle_t provider,
838848
839849err_free_known_slabs :
840850 critnib_delete (disjoint_pool -> known_slabs );
841-
842- err_free_disjoint_pool :
843- umf_ba_global_free (disjoint_pool );
844-
845851 return UMF_RESULT_ERROR_OUT_OF_HOST_MEMORY ;
846852}
847853
@@ -1146,7 +1152,7 @@ static umf_memory_pool_ops_t UMF_DISJOINT_POOL_OPS = {
11461152 .get_last_allocation_error = disjoint_pool_get_last_allocation_error ,
11471153 .get_name = disjoint_pool_get_name ,
11481154 .ext_ctl = disjoint_pool_ctl ,
1149- };
1155+ . ext_post_initialize = disjoint_pool_post_initialize };
11501156
11511157const umf_memory_pool_ops_t * umfDisjointPoolOps (void ) {
11521158 return & UMF_DISJOINT_POOL_OPS ;
0 commit comments