summaryrefslogtreecommitdiff
path: root/x11
diff options
context:
space:
mode:
authortnn <tnn>2015-09-24 23:57:27 +0000
committertnn <tnn>2015-09-24 23:57:27 +0000
commit3e37780950c15e103be517c8cdaa1b047dcaf75a (patch)
treee97e67441e413e7a87bfd1693b0e09674d1e1614 /x11
parentc26f600ac2520ac78bf668769e741bf21b09a3b7 (diff)
downloadpkgsrc-3e37780950c15e103be517c8cdaa1b047dcaf75a.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/Makefile4
-rw-r--r--x11/libxshmfence/files/xshmfence_semaphore.c6
-rw-r--r--x11/libxshmfence/files/xshmfence_semaphore.h1
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];