int sx_managerfree(sxmanager *m) { assert(sx_count(m) == 0); sx_vpool_free(&m->pool); ss_spinlockfree(&m->lock); return 0; }
uint64_t sx_max(sxmanager *m) { ss_spinlock(&m->lock); uint64_t id = 0; if (sx_count(m) > 0) { ssrbnode *node = ss_rbmax(&m->i); sx *max = sscast(node, sx, node); id = max->id; } ss_spinunlock(&m->lock); return id; }
uint32_t sx_min(sxmanager *m) { ss_spinlock(&m->lock); uint32_t id = 0; if (sx_count(m) > 0) { ssrbnode *node = ss_rbmin(&m->i); sx *min = sscast(node, sx, node); id = min->id; } ss_spinunlock(&m->lock); return id; }
uint64_t sx_vlsn(sxmanager *m) { ss_spinlock(&m->lock); uint64_t vlsn; if (sx_count(m) > 0) { ssrbnode *node = ss_rbmin(&m->i); sx *min = sscast(node, sx, node); vlsn = min->vlsn; } else { vlsn = sr_seq(m->r->seq, SR_LSN); } ss_spinunlock(&m->lock); return vlsn; }