Skip to content

Commit

Permalink
[C] Return an actual ref count value after increment/decrement operat…
Browse files Browse the repository at this point in the history
…ion completes + rename `aeron_image_refcnt_volatile` to `aeron_image_refcnt_acquire`.
  • Loading branch information
vyazelenko committed Feb 28, 2025
1 parent 0ffca12 commit 4c94c5f
Show file tree
Hide file tree
Showing 5 changed files with 14 additions and 18 deletions.
7 changes: 2 additions & 5 deletions aeron-client/src/main/c/aeron_client_conductor.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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,
Expand Down
2 changes: 1 addition & 1 deletion aeron-client/src/main/c/aeron_image.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
6 changes: 3 additions & 3 deletions aeron-client/src/main/c/aeron_image.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
12 changes: 6 additions & 6 deletions aeron-client/src/test/c/aeron_image_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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));
}
5 changes: 2 additions & 3 deletions aeron-client/src/test/cpp_wrapper/SystemTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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));

Expand Down

0 comments on commit 4c94c5f

Please sign in to comment.