diff --git a/aeron-client/src/main/c/aeron_client_conductor.c b/aeron-client/src/main/c/aeron_client_conductor.c index b9563817fc..fdd18223fa 100644 --- a/aeron-client/src/main/c/aeron_client_conductor.c +++ b/aeron-client/src/main/c/aeron_client_conductor.c @@ -526,7 +526,7 @@ int aeron_client_conductor_check_lingering_resources(aeron_client_conductor_t *c } } - if (aeron_image_refcnt_volatile(image) <= 0) + if (aeron_image_refcnt_acquire(image) <= 0) { aeron_client_conductor_release_log_buffer(conductor, image->log_buffer); aeron_image_delete(image); @@ -806,10 +806,7 @@ int aeron_client_conductor_linger_or_delete_all_images( for (size_t i = 0; i < current_image_list->length; i++) { aeron_image_t *image = current_image_list->array[i]; - int64_t refcnt; - - aeron_image_decr_refcnt(image); - refcnt = aeron_image_refcnt_volatile(image); + int64_t refcnt = aeron_image_decr_refcnt(image); aeron_array_to_ptr_hash_map_remove( &conductor->image_by_key_map, diff --git a/aeron-client/src/main/c/aeron_image.c b/aeron-client/src/main/c/aeron_image.c index 288c964cc5..7672f2959b 100644 --- a/aeron-client/src/main/c/aeron_image.c +++ b/aeron-client/src/main/c/aeron_image.c @@ -845,4 +845,4 @@ extern int64_t aeron_image_incr_refcnt(aeron_image_t *image); extern int64_t aeron_image_decr_refcnt(aeron_image_t *image); -extern int64_t aeron_image_refcnt_volatile(aeron_image_t *image); +extern int64_t aeron_image_refcnt_acquire(aeron_image_t *image); diff --git a/aeron-client/src/main/c/aeron_image.h b/aeron-client/src/main/c/aeron_image.h index 6e243e61b4..c2d8abedf1 100644 --- a/aeron-client/src/main/c/aeron_image.h +++ b/aeron-client/src/main/c/aeron_image.h @@ -126,17 +126,17 @@ inline int64_t aeron_image_incr_refcnt(aeron_image_t *image) { int64_t result; AERON_GET_AND_ADD_INT64(result, image->refcnt, INT64_C(1)); - return result; + return result + 1; } inline int64_t aeron_image_decr_refcnt(aeron_image_t *image) { int64_t result; AERON_GET_AND_ADD_INT64(result, image->refcnt, INT64_C(-1)); - return result; + return result - 1; } -inline int64_t aeron_image_refcnt_volatile(aeron_image_t *image) +inline int64_t aeron_image_refcnt_acquire(aeron_image_t *image) { int64_t value; AERON_GET_ACQUIRE(value, image->refcnt); diff --git a/aeron-client/src/test/c/aeron_image_test.cpp b/aeron-client/src/test/c/aeron_image_test.cpp index 83843d3d6c..9ac22e60f5 100644 --- a/aeron-client/src/test/c/aeron_image_test.cpp +++ b/aeron-client/src/test/c/aeron_image_test.cpp @@ -1077,11 +1077,11 @@ TEST_F(ImageTest, shouldCorrectlyCountReferences) { createImage(); - EXPECT_EQ(1, aeron_image_refcnt_volatile(m_image)); - EXPECT_EQ(1, aeron_image_incr_refcnt(m_image)); - EXPECT_EQ(2, aeron_image_refcnt_volatile(m_image)); - EXPECT_EQ(2, aeron_image_decr_refcnt(m_image)); - EXPECT_EQ(1, aeron_image_refcnt_volatile(m_image)); + EXPECT_EQ(1, aeron_image_refcnt_acquire(m_image)); + EXPECT_EQ(2, aeron_image_incr_refcnt(m_image)); + EXPECT_EQ(2, aeron_image_refcnt_acquire(m_image)); EXPECT_EQ(1, aeron_image_decr_refcnt(m_image)); - EXPECT_EQ(0, aeron_image_refcnt_volatile(m_image)); + EXPECT_EQ(1, aeron_image_refcnt_acquire(m_image)); + EXPECT_EQ(0, aeron_image_decr_refcnt(m_image)); + EXPECT_EQ(0, aeron_image_refcnt_acquire(m_image)); } diff --git a/aeron-client/src/test/cpp_wrapper/SystemTest.cpp b/aeron-client/src/test/cpp_wrapper/SystemTest.cpp index 77cef7c83e..1935c5ab04 100644 --- a/aeron-client/src/test/cpp_wrapper/SystemTest.cpp +++ b/aeron-client/src/test/cpp_wrapper/SystemTest.cpp @@ -331,11 +331,10 @@ TEST_P(SystemTestParameterized, shouldFreeUnavailableImage) raw_image = aeron_subscription_image_by_session_id(raw_subscription, publication->sessionId()); - EXPECT_EQ(4, aeron_image_decr_refcnt(raw_image)); - EXPECT_EQ(3, aeron_image_refcnt_volatile(raw_image)); + EXPECT_EQ(3, aeron_image_decr_refcnt(raw_image)); } - EXPECT_EQ(1, aeron_image_refcnt_volatile(raw_image)); + EXPECT_EQ(1, aeron_image_refcnt_acquire(raw_image)); EXPECT_EQ(1, subscription->imageCount()); EXPECT_EQ(1, aeron_subscription_image_count(raw_subscription));