diff --git a/src/mca/allocator/allocator.h b/src/mca/allocator/allocator.h index 21cf882d4e..e213ae67f2 100644 --- a/src/mca/allocator/allocator.h +++ b/src/mca/allocator/allocator.h @@ -26,6 +26,19 @@ typedef void* (*mca_allocator_realloc_fn_t)(struct mca_allocator_t*, void*, size typedef void(*mca_allocator_free_fn_t)(struct mca_allocator_t*, void *); +/* + * compact/return memory to higher level allocator + */ + +typedef int (*mca_allocator_return_fn_t)( + struct mca_allocator_t* allocator +); + + +/* + * cleanup (free) any resources held by allocator + */ + typedef int (*mca_allocator_finalize_fn_t)( struct mca_allocator_t* allocator ); @@ -35,6 +48,7 @@ struct mca_allocator_t { mca_allocator_alloc_fn_t alc_alloc; mca_allocator_realloc_fn_t alc_realloc; mca_allocator_free_fn_t alc_free; + mca_allocator_return_fn_t alc_return; mca_allocator_finalize_fn_t alc_finalize; }; typedef struct mca_allocator_t mca_allocator_t; diff --git a/src/mca/allocator/bucket/allocator_bucket.c b/src/mca/allocator/bucket/allocator_bucket.c index 23577045a9..e51dc0b3c5 100644 --- a/src/mca/allocator/bucket/allocator_bucket.c +++ b/src/mca/allocator/bucket/allocator_bucket.c @@ -14,25 +14,22 @@ int mca_allocator_bucket_module_close(void); void * mca_allocator_bucket_alloc_wrapper(struct mca_allocator_t* allocator, size_t size, size_t align); +static int mca_allocator_num_buckets; + + struct mca_allocator_t* mca_allocator_bucket_module_init( bool *allow_multi_user_threads, mca_allocator_segment_alloc_fn_t segment_alloc, mca_allocator_segment_free_fn_t segment_free) { - int num_buckets = 30; - int id; size_t alloc_size = sizeof(mca_allocator_bucket_t); mca_allocator_bucket_t * retval; mca_allocator_bucket_t * allocator = segment_alloc(&alloc_size); if(NULL == allocator) { return(NULL); } - id = mca_base_param_register_int("allocator","bucket","num_buckets", - NULL,num_buckets); - mca_base_param_lookup_int(id,&num_buckets); - - retval = mca_allocator_bucket_init((mca_allocator_t *) allocator, num_buckets, + retval = mca_allocator_bucket_init((mca_allocator_t *) allocator, mca_allocator_num_buckets, segment_alloc, segment_free); if(NULL == retval) { segment_free(allocator); @@ -48,6 +45,8 @@ struct mca_allocator_t* mca_allocator_bucket_module_init( int mca_allocator_bucket_module_open(void) { + int id = mca_base_param_register_int("allocator","bucket","num_buckets", NULL,30); + mca_base_param_lookup_int(id,&mca_allocator_num_buckets); return(OMPI_SUCCESS); }