@@ -167,6 +167,13 @@ umfDefaultCtlPoolHandle(void *hPool, umf_ctl_query_source_t operationType,
167167 return UMF_RESULT_ERROR_NOT_SUPPORTED ;
168168}
169169
170+ static umf_result_t umfDefaultTrimMemory (void * provider ,
171+ size_t minBytesToKeep ) {
172+ (void )provider ;
173+ (void )minBytesToKeep ;
174+ return UMF_RESULT_ERROR_NOT_SUPPORTED ;
175+ }
176+
170177// logical sum (OR) of all umf_pool_create_flags_t flags
171178static const umf_pool_create_flags_t UMF_POOL_CREATE_FLAG_ALL =
172179 UMF_POOL_CREATE_FLAG_OWN_PROVIDER | UMF_POOL_CREATE_FLAG_DISABLE_TRACKING ;
@@ -189,9 +196,9 @@ static umf_result_t umfPoolCreateInternal(const umf_memory_pool_ops_t *ops,
189196 const void * params ,
190197 umf_pool_create_flags_t flags ,
191198 umf_memory_pool_handle_t * hPool ) {
192- if (! ops || ! provider || ! hPool ) {
193- return UMF_RESULT_ERROR_INVALID_ARGUMENT ;
194- }
199+ UMF_CHECK (( ops != NULL ), UMF_RESULT_ERROR_INVALID_ARGUMENT );
200+ UMF_CHECK (( provider != NULL ), UMF_RESULT_ERROR_INVALID_ARGUMENT ) ;
201+ UMF_CHECK (( hPool != NULL ), UMF_RESULT_ERROR_INVALID_ARGUMENT );
195202
196203 // validate flags
197204 if (flags & ~UMF_POOL_CREATE_FLAG_ALL ) {
@@ -234,6 +241,10 @@ static umf_result_t umfPoolCreateInternal(const umf_memory_pool_ops_t *ops,
234241 pool -> ops .ext_ctl = umfDefaultCtlPoolHandle ;
235242 }
236243
244+ if (NULL == pool -> ops .ext_trim_memory ) {
245+ pool -> ops .ext_trim_memory = umfDefaultTrimMemory ;
246+ }
247+
237248 if (NULL == utils_mutex_init (& pool -> lock )) {
238249 LOG_ERR ("Failed to initialize mutex for pool" );
239250 ret = UMF_RESULT_ERROR_UNKNOWN ;
@@ -277,6 +288,8 @@ static umf_result_t umfPoolCreateInternal(const umf_memory_pool_ops_t *ops,
277288}
278289
279290umf_result_t umfPoolDestroy (umf_memory_pool_handle_t hPool ) {
291+ UMF_CHECK ((hPool != NULL ), UMF_RESULT_ERROR_INVALID_ARGUMENT );
292+
280293 if (umf_ba_global_is_destroyed ()) {
281294 return UMF_RESULT_ERROR_UNKNOWN ;
282295 }
@@ -454,3 +467,10 @@ umf_result_t umfPoolGetTag(umf_memory_pool_handle_t hPool, void **tag) {
454467 utils_mutex_unlock (& hPool -> lock );
455468 return UMF_RESULT_SUCCESS ;
456469}
470+
471+ umf_result_t umfPoolTrimMemory (umf_memory_pool_handle_t hPool ,
472+ size_t minBytesToKeep ) {
473+ UMF_CHECK ((hPool != NULL ), UMF_RESULT_ERROR_INVALID_ARGUMENT );
474+
475+ return hPool -> ops .ext_trim_memory (hPool -> pool_priv , minBytesToKeep );
476+ }
0 commit comments