diff options
author | tnn <tnn@pkgsrc.org> | 2015-09-24 23:57:27 +0000 |
---|---|---|
committer | tnn <tnn@pkgsrc.org> | 2015-09-24 23:57:27 +0000 |
commit | 28918a52c18a4b8923a067976df0dd8895a98a9a (patch) | |
tree | e97e67441e413e7a87bfd1693b0e09674d1e1614 /x11 | |
parent | 3042f06a8a12a0395ac23ff95ad9e1362fbaef8c (diff) | |
download | pkgsrc-28918a52c18a4b8923a067976df0dd8895a98a9a.tar.gz |
add a refcnt and do sem_unlink() when it drops to 0. Bump PKGREVISION.
Diffstat (limited to 'x11')
-rw-r--r-- | x11/libxshmfence/Makefile | 4 | ||||
-rw-r--r-- | x11/libxshmfence/files/xshmfence_semaphore.c | 6 | ||||
-rw-r--r-- | x11/libxshmfence/files/xshmfence_semaphore.h | 1 |
3 files changed, 9 insertions, 2 deletions
diff --git a/x11/libxshmfence/Makefile b/x11/libxshmfence/Makefile index 513f1ee0b7b..722cf76c9c3 100644 --- a/x11/libxshmfence/Makefile +++ b/x11/libxshmfence/Makefile @@ -1,7 +1,7 @@ -# $NetBSD: Makefile,v 1.3 2015/09/24 23:34:16 tnn Exp $ +# $NetBSD: Makefile,v 1.4 2015/09/24 23:57:27 tnn Exp $ DISTNAME= libxshmfence-1.2 -PKGREVISION= 1 +PKGREVISION= 2 CATEGORIES= x11 MASTER_SITES= http://xorg.freedesktop.org/archive/individual/lib/ EXTRACT_SUFX= .tar.bz2 diff --git a/x11/libxshmfence/files/xshmfence_semaphore.c b/x11/libxshmfence/files/xshmfence_semaphore.c index 714d5b64399..330c09b64ba 100644 --- a/x11/libxshmfence/files/xshmfence_semaphore.c +++ b/x11/libxshmfence/files/xshmfence_semaphore.c @@ -151,6 +151,7 @@ xshmfence_init(int fd) sem_t *cond; struct xshmfence f; + __sync_fetch_and_and(&f.refcnt, 0); __sync_fetch_and_and(&f.triggered, 0); __sync_fetch_and_and(&f.waiting, 0); @@ -201,6 +202,7 @@ xshmfence_open_semaphore(struct xshmfence *f) if ((f->cond = sem_open(f->condname, 0 , 0)) == SEM_FAILED) { errx(EXIT_FAILURE, "xshmfence_open_semaphore: sem_open failed"); } + __sync_fetch_and_add(&f->refcnt, 1); } /** @@ -214,4 +216,8 @@ xshmfence_close_semaphore(struct xshmfence *f) { sem_close(f->lock); sem_close(f->cond); + if (__sync_sub_and_fetch(&f->refcnt, 1) == 0) { + sem_unlink(f->lockname); + sem_unlink(f->condname); + } } diff --git a/x11/libxshmfence/files/xshmfence_semaphore.h b/x11/libxshmfence/files/xshmfence_semaphore.h index 5b3df110044..1631e6bf2e3 100644 --- a/x11/libxshmfence/files/xshmfence_semaphore.h +++ b/x11/libxshmfence/files/xshmfence_semaphore.h @@ -40,6 +40,7 @@ struct xshmfence { /* page 1 */ + int refcnt LOCK_ALIGN; int triggered LOCK_ALIGN; int waiting LOCK_ALIGN; char lockname[16]; |