@@ -201,24 +201,31 @@ 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 = UMF_RESULT_SUCCESS ;
210+ if (hPool -> ops .finalize (hPool -> pool_priv ) != UMF_RESULT_SUCCESS ) {
211+ ret = UMF_RESULT_ERROR_UNKNOWN ;
212+ }
210213
211214 umf_memory_provider_handle_t hUpstreamProvider = NULL ;
212215 umfPoolGetMemoryProvider (hPool , & hUpstreamProvider );
213216
214217 if (!(hPool -> flags & UMF_POOL_CREATE_FLAG_DISABLE_TRACKING )) {
215218 // Destroy tracking provider.
216- umfMemoryProviderDestroy (hPool -> provider );
219+ if (umfMemoryProviderDestroy (hPool -> provider ) != UMF_RESULT_SUCCESS ) {
220+ ret = UMF_RESULT_ERROR_UNKNOWN ;
221+ }
217222 }
218223
219224 if (hPool -> flags & UMF_POOL_CREATE_FLAG_OWN_PROVIDER ) {
220225 // Destroy associated memory provider.
221- umfMemoryProviderDestroy (hUpstreamProvider );
226+ if (umfMemoryProviderDestroy (hUpstreamProvider ) != UMF_RESULT_SUCCESS ) {
227+ ret = UMF_RESULT_ERROR_UNKNOWN ;
228+ }
222229 }
223230
224231 utils_mutex_destroy_not_free (& hPool -> lock );
@@ -227,6 +234,7 @@ void umfPoolDestroy(umf_memory_pool_handle_t hPool) {
227234
228235 // TODO: this free keeps memory in base allocator, so it can lead to OOM in some scenarios (it should be optimized)
229236 umf_ba_global_free (hPool );
237+ return ret ;
230238}
231239
232240umf_result_t umfFree (void * ptr ) {
0 commit comments