Skip to content

Commit 3e0e88e

Browse files
authored
Merge pull request #781 from ldorau/Fix_missing_unlock_in_Coarse_Provider
Fix missing unlock() in Coarse Provider
2 parents 8d18f28 + 4016c8d commit 3e0e88e

File tree

1 file changed

+15
-16
lines changed

1 file changed

+15
-16
lines changed

src/provider/provider_coarse.c

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1283,43 +1283,42 @@ static umf_result_t coarse_memory_provider_alloc(void *provider, size_t size,
12831283

12841284
if (coarse_provider->upstream_memory_provider == NULL) {
12851285
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;
12871288
}
12881289

12891290
umfMemoryProviderAlloc(coarse_provider->upstream_memory_provider, size,
12901291
alignment, resultPtr);
12911292
if (*resultPtr == NULL) {
12921293
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;
12941296
}
12951297

12961298
ASSERT_IS_ALIGNED(((uintptr_t)(*resultPtr)), alignment);
12971299

12981300
umf_result = coarse_add_upstream_block(coarse_provider, *resultPtr, size);
12991301
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;
13011307
}
13021308

13031309
LOG_DEBUG("coarse_ALLOC (upstream) %zu used %zu alloc %zu", size,
13041310
coarse_provider->used_size, coarse_provider->alloc_size);
13051311

1312+
umf_result = UMF_RESULT_SUCCESS;
1313+
1314+
err_unlock:
13061315
assert(debug_check(coarse_provider));
13071316

13081317
if (utils_mutex_unlock(&coarse_provider->lock) != 0) {
13091318
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+
}
13231322
}
13241323

13251324
return umf_result;

0 commit comments

Comments
 (0)