@@ -167,6 +167,13 @@ umfDefaultCtlPoolHandle(void *hPool, umf_ctl_query_source_t operationType,
167
167
return UMF_RESULT_ERROR_NOT_SUPPORTED ;
168
168
}
169
169
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
+
170
177
// logical sum (OR) of all umf_pool_create_flags_t flags
171
178
static const umf_pool_create_flags_t UMF_POOL_CREATE_FLAG_ALL =
172
179
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,
189
196
const void * params ,
190
197
umf_pool_create_flags_t flags ,
191
198
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 );
195
202
196
203
// validate flags
197
204
if (flags & ~UMF_POOL_CREATE_FLAG_ALL ) {
@@ -234,6 +241,10 @@ static umf_result_t umfPoolCreateInternal(const umf_memory_pool_ops_t *ops,
234
241
pool -> ops .ext_ctl = umfDefaultCtlPoolHandle ;
235
242
}
236
243
244
+ if (NULL == pool -> ops .ext_trim_memory ) {
245
+ pool -> ops .ext_trim_memory = umfDefaultTrimMemory ;
246
+ }
247
+
237
248
if (NULL == utils_mutex_init (& pool -> lock )) {
238
249
LOG_ERR ("Failed to initialize mutex for pool" );
239
250
ret = UMF_RESULT_ERROR_UNKNOWN ;
@@ -277,6 +288,8 @@ static umf_result_t umfPoolCreateInternal(const umf_memory_pool_ops_t *ops,
277
288
}
278
289
279
290
umf_result_t umfPoolDestroy (umf_memory_pool_handle_t hPool ) {
291
+ UMF_CHECK ((hPool != NULL ), UMF_RESULT_ERROR_INVALID_ARGUMENT );
292
+
280
293
if (umf_ba_global_is_destroyed ()) {
281
294
return UMF_RESULT_ERROR_UNKNOWN ;
282
295
}
@@ -454,3 +467,10 @@ umf_result_t umfPoolGetTag(umf_memory_pool_handle_t hPool, void **tag) {
454
467
utils_mutex_unlock (& hPool -> lock );
455
468
return UMF_RESULT_SUCCESS ;
456
469
}
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