@@ -201,24 +201,30 @@ static umf_result_t umfPoolCreateInternal(const umf_memory_pool_ops_t *ops,
201
201
return ret ;
202
202
}
203
203
204
- void umfPoolDestroy (umf_memory_pool_handle_t hPool ) {
204
+ umf_result_t umfPoolDestroy (umf_memory_pool_handle_t hPool ) {
205
205
if (umf_ba_global_is_destroyed ()) {
206
- return ;
206
+ return UMF_RESULT_ERROR_UNKNOWN ;
207
207
}
208
208
209
- hPool -> ops .finalize (hPool -> pool_priv );
209
+ umf_result_t ret = hPool -> ops .finalize (hPool -> pool_priv );
210
210
211
211
umf_memory_provider_handle_t hUpstreamProvider = NULL ;
212
212
umfPoolGetMemoryProvider (hPool , & hUpstreamProvider );
213
213
214
214
if (!(hPool -> flags & UMF_POOL_CREATE_FLAG_DISABLE_TRACKING )) {
215
215
// Destroy tracking provider.
216
- umfMemoryProviderDestroy (hPool -> provider );
216
+ umf_result_t ret2 = umfMemoryProviderDestroy (hPool -> provider );
217
+ if (ret == UMF_RESULT_SUCCESS ) {
218
+ ret = ret2 ;
219
+ }
217
220
}
218
221
219
222
if (hPool -> flags & UMF_POOL_CREATE_FLAG_OWN_PROVIDER ) {
220
223
// Destroy associated memory provider.
221
- umfMemoryProviderDestroy (hUpstreamProvider );
224
+ umf_result_t ret2 = umfMemoryProviderDestroy (hUpstreamProvider );
225
+ if (ret == UMF_RESULT_SUCCESS ) {
226
+ ret = ret2 ;
227
+ }
222
228
}
223
229
224
230
utils_mutex_destroy_not_free (& hPool -> lock );
@@ -227,6 +233,7 @@ void umfPoolDestroy(umf_memory_pool_handle_t hPool) {
227
233
228
234
// TODO: this free keeps memory in base allocator, so it can lead to OOM in some scenarios (it should be optimized)
229
235
umf_ba_global_free (hPool );
236
+ return ret ;
230
237
}
231
238
232
239
umf_result_t umfFree (void * ptr ) {
0 commit comments