@@ -1283,43 +1283,42 @@ static umf_result_t coarse_memory_provider_alloc(void *provider, size_t size,
1283
1283
1284
1284
if (coarse_provider -> upstream_memory_provider == NULL ) {
1285
1285
LOG_ERR ("out of memory - no upstream memory provider given" );
1286
- return UMF_RESULT_ERROR_OUT_OF_HOST_MEMORY ;
1286
+ umf_result = UMF_RESULT_ERROR_OUT_OF_HOST_MEMORY ;
1287
+ goto err_unlock ;
1287
1288
}
1288
1289
1289
1290
umfMemoryProviderAlloc (coarse_provider -> upstream_memory_provider , size ,
1290
1291
alignment , resultPtr );
1291
1292
if (* resultPtr == NULL ) {
1292
1293
LOG_ERR ("out of memory - upstream memory provider allocation failed" );
1293
- return UMF_RESULT_ERROR_OUT_OF_HOST_MEMORY ;
1294
+ umf_result = UMF_RESULT_ERROR_OUT_OF_HOST_MEMORY ;
1295
+ goto err_unlock ;
1294
1296
}
1295
1297
1296
1298
ASSERT_IS_ALIGNED (((uintptr_t )(* resultPtr )), alignment );
1297
1299
1298
1300
umf_result = coarse_add_upstream_block (coarse_provider , * resultPtr , size );
1299
1301
if (umf_result != UMF_RESULT_SUCCESS ) {
1300
- return umf_result ;
1302
+ if (!coarse_provider -> disable_upstream_provider_free ) {
1303
+ umfMemoryProviderFree (coarse_provider -> upstream_memory_provider ,
1304
+ * resultPtr , size );
1305
+ }
1306
+ goto err_unlock ;
1301
1307
}
1302
1308
1303
1309
LOG_DEBUG ("coarse_ALLOC (upstream) %zu used %zu alloc %zu" , size ,
1304
1310
coarse_provider -> used_size , coarse_provider -> alloc_size );
1305
1311
1312
+ umf_result = UMF_RESULT_SUCCESS ;
1313
+
1314
+ err_unlock :
1306
1315
assert (debug_check (coarse_provider ));
1307
1316
1308
1317
if (utils_mutex_unlock (& coarse_provider -> lock ) != 0 ) {
1309
1318
LOG_ERR ("unlocking the lock failed" );
1310
- umf_result = UMF_RESULT_ERROR_UNKNOWN ;
1311
- goto unlock_error ;
1312
- }
1313
-
1314
- return UMF_RESULT_SUCCESS ;
1315
-
1316
- unlock_error :
1317
- coarse_ravl_rm (coarse_provider -> all_blocks , * resultPtr );
1318
- coarse_ravl_rm (coarse_provider -> upstream_blocks , * resultPtr );
1319
-
1320
- if (!coarse_provider -> disable_upstream_provider_free ) {
1321
- umfMemoryProviderFree (coarse_provider -> upstream_memory_provider ,
1322
- * resultPtr , size );
1319
+ if (umf_result == UMF_RESULT_SUCCESS ) {
1320
+ umf_result = UMF_RESULT_ERROR_UNKNOWN ;
1321
+ }
1323
1322
}
1324
1323
1325
1324
return umf_result ;
0 commit comments