Data-HierTimingWheel-Shared
view release on metacpan or search on metacpan
hw_rwlock_wrunlock(h);
OUTPUT:
RETVAL
void
advance(self, ticks = 1)
SV *self
UV ticks
PREINIT:
EXTRACT(self);
PPCODE:
{
REEXTRACT(self); /* `ticks = 1` is converted after PREINIT, so its magic already ran */
uint64_t *out = NULL, fired = 0, i, cap = h->capacity;
if (cap) { Newx(out, (size_t)cap, uint64_t); SAVEFREEPV(out); } /* alloc BEFORE the lock */
hw_rwlock_wrlock(h);
fired = cap ? hw_advance_locked(h, (uint64_t)ticks, out, cap) : 0;
__atomic_fetch_add(&h->hdr->stat_ops, 1, __ATOMIC_RELAXED);
hw_rwlock_wrunlock(h);
EXTEND(SP, (SSize_t)fired);
for (i = 0; i < fired; i++) PUSHs(sv_2mortal(newSVuv((UV)out[i]))); /* Perl alloc AFTER unlock */
( run in 0.954 second using v1.01-cache-2.11-cpan-92ad3014f07 )