Skip to content

Commit 42a3bd8

Browse files
authored
Merge pull request #102 from ldorau/Ignore_error_of_os_munmap_when_size_equals_0
Ignore error of os_munmap() when size equals 0
2 parents 9bd63ce + 7348010 commit 42a3bd8

File tree

2 files changed

+15
-3
lines changed

2 files changed

+15
-3
lines changed

src/provider/provider_os_memory.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -337,7 +337,8 @@ static umf_result_t os_free(void *provider, void *ptr, size_t size) {
337337

338338
errno = 0;
339339
int ret = os_munmap(ptr, size);
340-
if (ret) {
340+
// ignore error when size == 0
341+
if (ret && (size > 0)) {
341342
os_store_last_native_error(UMF_OS_RESULT_ERROR_FREE_FAILED, errno);
342343
if (os_config->traces) {
343344
perror("memory deallocation failed");

test/provider_os_memory.cpp

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -257,11 +257,22 @@ TEST_P(umfProviderTest, get_name) {
257257
ASSERT_STREQ(name, "OS");
258258
}
259259

260+
TEST_P(umfProviderTest, free_size_0_ptr_not_null) {
261+
umf_result_t umf_result =
262+
umfMemoryProviderFree(provider.get(), INVALID_PTR, 0);
263+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
264+
}
265+
260266
// other negative tests
261267

262-
TEST_P(umfProviderTest, free_INVALID_POINTER) {
268+
TEST_P(umfProviderTest, free_NULL) {
269+
umf_result_t umf_result = umfMemoryProviderFree(provider.get(), nullptr, 0);
270+
ASSERT_EQ(umf_result, UMF_RESULT_ERROR_INVALID_ARGUMENT);
271+
}
272+
273+
TEST_P(umfProviderTest, free_INVALID_POINTER_SIZE_GT_0) {
263274
umf_result_t umf_result =
264-
umfMemoryProviderFree(provider.get(), INVALID_PTR, 0);
275+
umfMemoryProviderFree(provider.get(), INVALID_PTR, page_plus_64);
265276
ASSERT_EQ(umf_result, UMF_RESULT_ERROR_MEMORY_PROVIDER_SPECIFIC);
266277

267278
verify_last_native_error(provider.get(), UMF_OS_RESULT_ERROR_FREE_FAILED);

0 commit comments

Comments
 (0)