diff --git a/configure.ac b/configure.ac index ce138b2b7577029840b50714537c79c119116f88..7d3fe91e16b4a2da705a5858824c7bd7d8dee316 100644 --- a/configure.ac +++ b/configure.ac @@ -400,6 +400,18 @@ AC_CHECK_HEADERS([stdlib.h]) AC_C_CONST AC_TYPE_SIZE_T +AC_ARG_ENABLE([mempool], + AS_HELP_STRING([--enable-mempool], [Enable memory pool implementation @<:@default=enabled@:>@]), + [if test "x$enableval" = "xyes" ; then + use_mempool=yes + elif test "x$enableval" = "xno" ; then + use_mempool=no + AC_DEFINE(DISABLE_MEMPOOL,[1],[Disable mempool (for debugging, mostly)]) + else + AC_MSG_ERROR([--enable-mempool must be used with 'yes' or 'no' argument]) + fi], + [use_mempool=yes]) + dnl end of libyaml-introduced checks dnl ***************************************************************************** @@ -409,7 +421,7 @@ dnl We will support (at some point) OFI, MPI, and SMP dnl An SMP pool manager is built if neither OFI or MPI are enabled AC_ARG_ENABLE([ofi-pool-manager], - AS_HELP_STRING([--enable-ofi-pool-manager], [Enable OpenFabric based pool manager @<:@default=disabled@:>@]]),[],[enable_ofi_pool_manager=yes]) + AS_HELP_STRING([--enable-ofi-pool-manager], [Enable OpenFabric based pool manager @<:@default=enabled@:>@]]),[],[enable_ofi_pool_manager=yes]) AC_ARG_ENABLE([mpi-pool-manager], AS_HELP_STRING([--enable-mpi-pool-manager], [Enable MPI based pool manager @<:@default=disabled@:>@]])) diff --git a/maestro/mempool.c b/maestro/mempool.c index e3706940807d605245ec89359145776a65815045..485bb4d61337baf28a6f2650eaaca42ae7c6e13c 100644 --- a/maestro/mempool.c +++ b/maestro/mempool.c @@ -275,6 +275,18 @@ mstro_mempool_destroy(mstro_mempool pool) free(pool); } +#ifdef DISABLE_MEMPOOL +void * +mstro_mempool_alloc(mstro_mempool pool) +{ + assert(pool->num_arenas>0); + pool->arenas[0]->num_alloc++; + pool->arenas[0]->num_in_flight++; + return malloc(pool->object_size); +} + +#else + void * mstro_mempool_alloc(mstro_mempool pool) { @@ -323,6 +335,20 @@ mstro_mempool_alloc(mstro_mempool pool) } } } +#endif + +#ifdef DISABLE_MEMPOOL + +void +mstro_mempool_free(mstro_mempool pool, void *obj) +{ + assert(pool->num_arenas>0); + free(obj); + pool->arenas[0]->num_free++; + pool->arenas[0]->num_in_flight--; +} + +#else void mstro_mempool_free(mstro_mempool pool, void *obj) @@ -378,4 +404,5 @@ mstro_mempool_free(mstro_mempool pool, void *obj) arena->num_recycle++; } } +#endif