Closed
Description
aeron_mpsc_rb_claim_capacity function do{}while(...) would trigger retry.
suggest reset padding to zero on start of each retry.
e.g.,
do
{
int32_t available_capacity = 0;
padding = 0; /*reset*/
.......
if (required_capacity > to_buffer_end_length)
{
size_t
50ED
head_index = (int32_t)head & mask;
if (required_capacity > head_index)
{
AERON_GET_VOLATILE(head, ring_buffer->descriptor->head_position);
head_index = (int32_t)head & mask;
if (required_capacity > head_index)
{
return -1;
}
AERON_PUT_ORDERED(ring_buffer->descriptor->head_cache_position, head);
}
padding = to_buffer_end_length;
}
}
while (!aeron_cmpxchg64(
&(ring_buffer->descriptor->tail_position),
tail,
tail + (int32_t)required_capacity + (int32_t)padding));