Data-Sync-Shared
view release on metacpan or search on metacpan
RETVAL = h->notify_fd;
OUTPUT:
RETVAL
bool
notify(self)
SV *self
PREINIT:
EXTRACT_HANDLE("Data::Sync::Shared::RWLock", self);
CODE:
RETVAL = sync_notify(h);
OUTPUT:
RETVAL
SV *
eventfd_consume(self)
SV *self
PREINIT:
EXTRACT_HANDLE("Data::Sync::Shared::RWLock", self);
CODE:
int64_t v = sync_eventfd_consume(h);
RETVAL = (v >= 0) ? newSViv((IV)v) : &PL_sv_undef;
OUTPUT:
RETVAL
void
sync(self)
SV *self
PREINIT:
EXTRACT_HANDLE("Data::Sync::Shared::RWLock", self);
CODE:
if (sync_msync(h) != 0) croak("msync: %s", strerror(errno));
void
unlink(self_or_class, ...)
SV *self_or_class
CODE:
const char *p;
if (sv_isobject(self_or_class)) {
SyncHandle *h = INT2PTR(SyncHandle*, SvIV(SvRV(self_or_class)));
if (!h) croak("Attempted to use a destroyed object");
p = h->path;
} else {
if (items < 2) croak("Usage: ...->unlink($path)");
p = SvPV_nolen(ST(1));
}
if (!p) croak("cannot unlink anonymous or memfd object");
if (unlink(p) != 0)
croak("unlink(%s): %s", p, strerror(errno));
SV *
stats(self)
SV *self
PREINIT:
EXTRACT_HANDLE("Data::Sync::Shared::RWLock", self);
CODE:
HV *hv = newHV();
SyncHeader *hdr = h->hdr;
uint32_t val = __atomic_load_n(&hdr->value, __ATOMIC_RELAXED);
const char *state;
if (val == 0) state = "unlocked";
else if (val < SYNC_RWLOCK_WRITER_BIT) state = "read_locked";
else state = "write_locked";
hv_store(hv, "state", 5, newSVpv(state, 0), 0);
hv_store(hv, "readers", 7,
newSVuv(val < SYNC_RWLOCK_WRITER_BIT ? val : 0), 0);
hv_store(hv, "waiters", 7, newSVuv((UV)__atomic_load_n(&hdr->waiters, __ATOMIC_RELAXED)), 0);
hv_store(hv, "mmap_size", 9, newSVuv((UV)h->mmap_size), 0);
hv_store(hv, "acquires", 8, newSVuv((UV)__atomic_load_n(&hdr->stat_acquires, __ATOMIC_RELAXED)), 0);
hv_store(hv, "releases", 8, newSVuv((UV)__atomic_load_n(&hdr->stat_releases, __ATOMIC_RELAXED)), 0);
hv_store(hv, "recoveries", 10, newSVuv((UV)__atomic_load_n(&hdr->stat_recoveries, __ATOMIC_RELAXED)), 0);
RETVAL = newRV_noinc((SV *)hv);
OUTPUT:
RETVAL
MODULE = Data::Sync::Shared PACKAGE = Data::Sync::Shared::Condvar
PROTOTYPES: DISABLE
SV *
new(class, path)
const char *class
SV *path
PREINIT:
char errbuf[SYNC_ERR_BUFLEN];
CODE:
const char *p = SvOK(path) ? SvPV_nolen(path) : NULL;
SyncHandle *h = sync_create(p, SYNC_TYPE_CONDVAR, 0, 0, errbuf);
if (!h) croak("Data::Sync::Shared::Condvar->new: %s", errbuf);
MAKE_OBJ(class, h);
OUTPUT:
RETVAL
SV *
new_memfd(class, name)
const char *class
const char *name
PREINIT:
char errbuf[SYNC_ERR_BUFLEN];
CODE:
SyncHandle *h = sync_create_memfd(name, SYNC_TYPE_CONDVAR, 0, 0, errbuf);
if (!h) croak("Data::Sync::Shared::Condvar->new_memfd: %s", errbuf);
MAKE_OBJ(class, h);
OUTPUT:
RETVAL
SV *
new_from_fd(class, fd)
const char *class
int fd
PREINIT:
char errbuf[SYNC_ERR_BUFLEN];
CODE:
SyncHandle *h = sync_open_fd(fd, SYNC_TYPE_CONDVAR, errbuf);
if (!h) croak("Data::Sync::Shared::Condvar->new_from_fd: %s", errbuf);
MAKE_OBJ(class, h);
OUTPUT:
RETVAL
void
DESTROY(self)
SV *self
CODE:
( run in 2.475 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )