@@ -239,24 +239,30 @@ static umf_result_t umfPoolCreateInternal(const umf_memory_pool_ops_t *ops,
239239 return ret ;
240240}
241241
242- void umfPoolDestroy (umf_memory_pool_handle_t hPool ) {
242+ umf_result_t umfPoolDestroy (umf_memory_pool_handle_t hPool ) {
243243 if (umf_ba_global_is_destroyed ()) {
244- return ;
244+ return UMF_RESULT_ERROR_UNKNOWN ;
245245 }
246246
247- hPool -> ops .finalize (hPool -> pool_priv );
247+ umf_result_t ret = hPool -> ops .finalize (hPool -> pool_priv );
248248
249249 umf_memory_provider_handle_t hUpstreamProvider = NULL ;
250250 umfPoolGetMemoryProvider (hPool , & hUpstreamProvider );
251251
252252 if (!(hPool -> flags & UMF_POOL_CREATE_FLAG_DISABLE_TRACKING )) {
253253 // Destroy tracking provider.
254- umfMemoryProviderDestroy (hPool -> provider );
254+ umf_result_t ret2 = umfMemoryProviderDestroy (hPool -> provider );
255+ if (ret == UMF_RESULT_SUCCESS ) {
256+ ret = ret2 ;
257+ }
255258 }
256259
257260 if (hPool -> flags & UMF_POOL_CREATE_FLAG_OWN_PROVIDER ) {
258261 // Destroy associated memory provider.
259- umfMemoryProviderDestroy (hUpstreamProvider );
262+ umf_result_t ret2 = umfMemoryProviderDestroy (hUpstreamProvider );
263+ if (ret == UMF_RESULT_SUCCESS ) {
264+ ret = ret2 ;
265+ }
260266 }
261267
262268 utils_mutex_destroy_not_free (& hPool -> lock );
@@ -265,6 +271,7 @@ void umfPoolDestroy(umf_memory_pool_handle_t hPool) {
265271
266272 // TODO: this free keeps memory in base allocator, so it can lead to OOM in some scenarios (it should be optimized)
267273 umf_ba_global_free (hPool );
274+ return ret ;
268275}
269276
270277umf_result_t umfFree (void * ptr ) {
0 commit comments