Data-HierTimingWheel-Shared

 view release on metacpan or  search on metacpan

Shared.xs  view on Meta::CPAN

    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 )