@@ -201,24 +201,30 @@ static umf_result_t umfPoolCreateInternal(const umf_memory_pool_ops_t *ops,
201201 return ret ;
202202}
203203
204- void umfPoolDestroy (umf_memory_pool_handle_t hPool ) {
204+ umf_result_t umfPoolDestroy (umf_memory_pool_handle_t hPool ) {
205205 if (umf_ba_global_is_destroyed ()) {
206- return ;
206+ return UMF_RESULT_ERROR_UNKNOWN ;
207207 }
208208
209- hPool -> ops .finalize (hPool -> pool_priv );
209+ umf_result_t ret = hPool -> ops .finalize (hPool -> pool_priv );
210210
211211 umf_memory_provider_handle_t hUpstreamProvider = NULL ;
212212 umfPoolGetMemoryProvider (hPool , & hUpstreamProvider );
213213
214214 if (!(hPool -> flags & UMF_POOL_CREATE_FLAG_DISABLE_TRACKING )) {
215215 // 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+ }
217220 }
218221
219222 if (hPool -> flags & UMF_POOL_CREATE_FLAG_OWN_PROVIDER ) {
220223 // Destroy associated memory provider.
221- umfMemoryProviderDestroy (hUpstreamProvider );
224+ umf_result_t ret2 = umfMemoryProviderDestroy (hUpstreamProvider );
225+ if (ret == UMF_RESULT_SUCCESS ) {
226+ ret = ret2 ;
227+ }
222228 }
223229
224230 utils_mutex_destroy_not_free (& hPool -> lock );
@@ -227,6 +233,7 @@ void umfPoolDestroy(umf_memory_pool_handle_t hPool) {
227233
228234 // TODO: this free keeps memory in base allocator, so it can lead to OOM in some scenarios (it should be optimized)
229235 umf_ba_global_free (hPool );
236+ return ret ;
230237}
231238
232239umf_result_t umfFree (void * ptr ) {
0 commit comments