Data-ReqRep-Shared
view release on metacpan or search on metacpan
static inline int reqrep_int_try_send(ReqRepHandle *h, int64_t value, uint64_t *out_id) {
int32_t rslot = reqrep_slot_acquire(h);
if (rslot < 0) return -3;
RespSlotHeader *rs = reqrep_resp_slot(h, (uint32_t)rslot);
uint32_t gen = __atomic_load_n(&rs->generation, __ATOMIC_ACQUIRE);
ReqRepHeader *hdr = h->hdr;
/* Use the attach-cached, validated slot base -- never re-derive from the
* peer-writable hdr->req_slots_off, which a lock-violating peer could
* corrupt to relocate the array under us. */
ReqIntSlot *slots = (ReqIntSlot *)h->req_slots;
uint32_t mask = h->req_cap_mask;
uint64_t pos = __atomic_load_n(&hdr->req_tail, __ATOMIC_RELAXED);
for (;;) {
ReqIntSlot *slot = &slots[pos & mask];
uint64_t seq = __atomic_load_n(&slot->sequence, __ATOMIC_ACQUIRE);
int64_t diff = (int64_t)seq - (int64_t)pos;
if (diff == 0) {
if (__atomic_compare_exchange_n(&hdr->req_tail, &pos, pos + 1,
( run in 1.158 second using v1.01-cache-2.11-cpan-941387dca55 )