Wed May 4 02:43:31 2016 UTC ()
avoid using mktemp since it triggers warnings

Bump rev.


(tnn)
diff -r1.4 -r1.5 pkgsrc/x11/libxshmfence/Makefile
diff -r1.2 -r1.3 pkgsrc/x11/libxshmfence/files/xshmfence_semaphore.c

cvs diff -r1.4 -r1.5 pkgsrc/x11/libxshmfence/Makefile (expand / switch to unified diff)

--- pkgsrc/x11/libxshmfence/Makefile 2015/09/24 23:57:27 1.4
+++ pkgsrc/x11/libxshmfence/Makefile 2016/05/04 02:43:31 1.5
@@ -1,17 +1,17 @@ @@ -1,17 +1,17 @@
1# $NetBSD: Makefile,v 1.4 2015/09/24 23:57:27 tnn Exp $ 1# $NetBSD: Makefile,v 1.5 2016/05/04 02:43:31 tnn Exp $
2 2
3DISTNAME= libxshmfence-1.2 3DISTNAME= libxshmfence-1.2
4PKGREVISION= 2 4PKGREVISION= 3
5CATEGORIES= x11 5CATEGORIES= x11
6MASTER_SITES= http://xorg.freedesktop.org/archive/individual/lib/ 6MASTER_SITES= http://xorg.freedesktop.org/archive/individual/lib/
7EXTRACT_SUFX= .tar.bz2 7EXTRACT_SUFX= .tar.bz2
8 8
9MAINTAINER= pkgsrc-users@NetBSD.org 9MAINTAINER= pkgsrc-users@NetBSD.org
10HOMEPAGE= http://xorg.freedesktop.org/ 10HOMEPAGE= http://xorg.freedesktop.org/
11COMMENT= Shared memory 'SyncFence' synchronization primitive 11COMMENT= Shared memory 'SyncFence' synchronization primitive
12LICENSE= mit 12LICENSE= mit
13 13
14GNU_CONFIGURE= yes 14GNU_CONFIGURE= yes
15USE_LIBTOOL= yes 15USE_LIBTOOL= yes
16USE_TOOLS+= pkg-config autoconf automake autoreconf 16USE_TOOLS+= pkg-config autoconf automake autoreconf
17 17

cvs diff -r1.2 -r1.3 pkgsrc/x11/libxshmfence/files/xshmfence_semaphore.c (expand / switch to unified diff)

--- pkgsrc/x11/libxshmfence/files/xshmfence_semaphore.c 2015/09/24 23:57:27 1.2
+++ pkgsrc/x11/libxshmfence/files/xshmfence_semaphore.c 2016/05/04 02:43:31 1.3
@@ -15,33 +15,36 @@ @@ -15,33 +15,36 @@
15 * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, 15 * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
16 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO 16 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
17 * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR 17 * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
18 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, 18 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
19 * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 19 * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
20 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 20 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
21 * OF THIS SOFTWARE. 21 * OF THIS SOFTWARE.
22 */ 22 */
23 23
24#if HAVE_CONFIG_H 24#if HAVE_CONFIG_H
25#include "config.h" 25#include "config.h"
26#endif 26#endif
27 27
28#include <fcntl.h> 
29#include <string.h> 
30#include <err.h> 28#include <err.h>
 29#include <errno.h>
 30#include <fcntl.h>
 31#include <stdio.h>
31#include <unistd.h> 32#include <unistd.h>
32 33
33#include "xshmfenceint.h" 34#include "xshmfenceint.h"
34 35
 36static sem_t *mksemtemp(char *, const char *);
 37
35#define LOCK() do {} while (sem_wait(f->lock) != 0) 38#define LOCK() do {} while (sem_wait(f->lock) != 0)
36#define UNLOCK() do { sem_post(f->lock); } while (0) 39#define UNLOCK() do { sem_post(f->lock); } while (0)
37#define COND_WAIT() do {} while (sem_wait(f->cond) != 0) 40#define COND_WAIT() do {} while (sem_wait(f->cond) != 0)
38#define COND_SIGNAL() do { sem_post(f->cond); } while (0) 41#define COND_SIGNAL() do { sem_post(f->cond); } while (0)
39 42
40/** 43/**
41 * xshmfence_trigger: 44 * xshmfence_trigger:
42 * @f: An X fence 45 * @f: An X fence
43 * 46 *
44 * Set @f to triggered, waking all waiters. 47 * Set @f to triggered, waking all waiters.
45 * 48 *
46 * Return value: 0 on success and -1 on error (in which case, errno 49 * Return value: 0 on success and -1 on error (in which case, errno
47 * will be set as appropriate). 50 * will be set as appropriate).
@@ -145,36 +148,32 @@ xshmfence_reset(struct xshmfence *f) { @@ -145,36 +148,32 @@ xshmfence_reset(struct xshmfence *f) {
145 * Initialize the fence when first allocated 148 * Initialize the fence when first allocated
146 **/ 149 **/
147void 150void
148xshmfence_init(int fd) 151xshmfence_init(int fd)
149{ 152{
150 sem_t *lock; 153 sem_t *lock;
151 sem_t *cond; 154 sem_t *cond;
152 struct xshmfence f; 155 struct xshmfence f;
153 156
154 __sync_fetch_and_and(&f.refcnt, 0); 157 __sync_fetch_and_and(&f.refcnt, 0);
155 __sync_fetch_and_and(&f.triggered, 0); 158 __sync_fetch_and_and(&f.triggered, 0);
156 __sync_fetch_and_and(&f.waiting, 0); 159 __sync_fetch_and_and(&f.waiting, 0);
157  160
158 strlcpy(f.lockname, "/xshmfl-XXXX", sizeof(f.lockname)); 161 lock = mksemtemp(f.lockname, "/xshmfl-%i");
159 mktemp(f.lockname); 
160 lock = sem_open(f.lockname, O_CREAT|O_EXCL, 0600, 1); 
161 if (lock == SEM_FAILED) { 162 if (lock == SEM_FAILED) {
162 err(EXIT_FAILURE, "xshmfence_init: sem_open"); 163 err(EXIT_FAILURE, "xshmfence_init: sem_open");
163 } 164 }
164  165
165 strlcpy(f.condname, "/xshmfc-XXXX", sizeof(f.condname)); 166 cond = mksemtemp(f.condname, "/xshmfl-%i");
166 mktemp(f.condname); 
167 cond = sem_open(f.condname, O_CREAT|O_EXCL, 0600, 0); 
168 if (cond == SEM_FAILED) { 167 if (cond == SEM_FAILED) {
169 err(EXIT_FAILURE, "xshmfence_init: sem_open"); 168 err(EXIT_FAILURE, "xshmfence_init: sem_open");
170 } 169 }
171  170
172 sem_close(lock); 171 sem_close(lock);
173 sem_close(cond); 172 sem_close(cond);
174  173
175 pwrite(fd, &f, sizeof(f), 0); 174 pwrite(fd, &f, sizeof(f), 0);
176} 175}
177 176
178/** 177/**
179 * xshmfence_open_semaphore: 178 * xshmfence_open_semaphore:
180 * @f: An X fence 179 * @f: An X fence
@@ -211,13 +210,32 @@ xshmfence_open_semaphore(struct xshmfenc @@ -211,13 +210,32 @@ xshmfence_open_semaphore(struct xshmfenc
211 * 210 *
212 * Close the semaphore before unmapping the fence 211 * Close the semaphore before unmapping the fence
213 **/ 212 **/
214void 213void
215xshmfence_close_semaphore(struct xshmfence *f) 214xshmfence_close_semaphore(struct xshmfence *f)
216{ 215{
217 sem_close(f->lock); 216 sem_close(f->lock);
218 sem_close(f->cond); 217 sem_close(f->cond);
219 if (__sync_sub_and_fetch(&f->refcnt, 1) == 0) { 218 if (__sync_sub_and_fetch(&f->refcnt, 1) == 0) {
220 sem_unlink(f->lockname); 219 sem_unlink(f->lockname);
221 sem_unlink(f->condname); 220 sem_unlink(f->condname);
222 } 221 }
223} 222}
 223
 224static sem_t *
 225mksemtemp(char *name, const char *template)
 226{
 227 sem_t *ret;
 228 pid_t p;
 229 p = getpid();
 230 for(;;) {
 231 sprintf(name, template, p);
 232 ret = sem_open(name, O_CREAT|O_EXCL, 0600, 1);
 233 if (ret == SEM_FAILED) {
 234 if (errno == EEXIST) {
 235 p++;
 236 continue;
 237 }
 238 }
 239 return ret;
 240 }
 241}