From f7c9e00eee87dc4eb24fc6e6ad68af38ba2bbe98 Mon Sep 17 00:00:00 2001 From: Jens Axboe Date: Fri, 9 Mar 2007 12:40:02 +0100 Subject: [PATCH] Shrink the semaphores a little The downside is that they hold the fd open, so it steals one possible file open per-file. Will fix that in the next commit. Signed-off-by: Jens Axboe --- mutex.c | 12 ++++++------ mutex.h | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/mutex.c b/mutex.c index 6ec5d573..be3258df 100644 --- a/mutex.c +++ b/mutex.c @@ -10,18 +10,17 @@ void fio_sem_remove(struct fio_sem *sem) { - unlink(sem->sem_name); + close(sem->sem_fd); munmap(sem, sizeof(*sem)); } struct fio_sem *fio_sem_init(int value) { + char sem_name[] = "/tmp/.fio_sem.XXXXXX"; struct fio_sem *sem = NULL; pthread_mutexattr_t attr; - char sem_name[32]; int fd; - sprintf(sem_name, "/tmp/.fio_lock.XXXXXX"); fd = mkstemp(sem_name); if (fd < 0) { perror("open sem"); @@ -42,9 +41,9 @@ struct fio_sem *fio_sem_init(int value) goto err; } - close(fd); + unlink(sem_name); + sem->sem_fd = fd; sem->value = value; - strcpy(sem->sem_name, sem_name); if (pthread_mutexattr_init(&attr)) { perror("pthread_mutexattr_init"); @@ -62,7 +61,8 @@ struct fio_sem *fio_sem_init(int value) return sem; err: if (sem) - munmap(sem, sizeof(*sem)); + fio_sem_remove(sem); + unlink(sem_name); return NULL; } diff --git a/mutex.h b/mutex.h index 483e5f45..c4b0d8ed 100644 --- a/mutex.h +++ b/mutex.h @@ -8,7 +8,7 @@ struct fio_sem { pthread_cond_t cond; unsigned int value; - char sem_name[32]; + int sem_fd; }; extern struct fio_sem *fio_sem_init(int); -- 2.25.1