From: Jens Axboe Date: Sat, 1 Mar 2008 17:38:12 +0000 (+0100) Subject: Add a semaphore implementation X-Git-Tag: fio-1.20-rc1~19 X-Git-Url: https://git.kernel.dk/?p=fio.git;a=commitdiff_plain;h=0c5b4087e96cdcfad2d524cc400e54e787ad65c4;ds=sidebyside Add a semaphore implementation To be used by the file sharing. Signed-off-by: Jens Axboe --- diff --git a/Makefile b/Makefile index e0e323de..7c79e910 100644 --- a/Makefile +++ b/Makefile @@ -6,8 +6,8 @@ CFLAGS = -Wwrite-strings -Wall -D_GNU_SOURCE -D_LARGEFILE_SOURCE -D_FILE_OFFSET_ PROGS = fio SCRIPTS = fio_generate_plots OBJS = gettime.o fio.o ioengines.o init.o stat.o log.o time.o filesetup.o \ - eta.o verify.o memory.o io_u.o parse.o mutex.o options.o rbtree.o \ - diskutil.o fifo.o blktrace.o smalloc.o + eta.o verify.o memory.o io_u.o parse.o mutex.o sem.o options.o \ + rbtree.o diskutil.o fifo.o blktrace.o smalloc.o OBJS += crc/crc7.o OBJS += crc/crc16.o diff --git a/sem.c b/sem.c new file mode 100644 index 00000000..f94fa257 --- /dev/null +++ b/sem.c @@ -0,0 +1,44 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#include "sem.h" +#include "smalloc.h" + +void fio_sem_remove(struct fio_sem *sem) +{ + sfree(sem); +} + +struct fio_sem *fio_sem_init(int value) +{ + struct fio_sem *sem; + + sem = smalloc(sizeof(*sem)); + if (!sem) + return NULL; + + sem->sem_val = value; + + if (!sem_init(&sem->sem, 1, value)) + return sem; + + perror("sem_init"); + sfree(sem); + return NULL; +} + +void fio_sem_down(struct fio_sem *sem) +{ + sem_wait(&sem->sem); +} + +void fio_sem_up(struct fio_sem *sem) +{ + sem_post(&sem->sem); +} diff --git a/sem.h b/sem.h new file mode 100644 index 00000000..a7b4664d --- /dev/null +++ b/sem.h @@ -0,0 +1,16 @@ +#ifndef FIO_SEM_H +#define FIO_SEM_H + +#include + +struct fio_sem { + sem_t sem; + int sem_val; +}; + +extern struct fio_sem *fio_sem_init(int); +extern void fio_sem_remove(struct fio_sem *); +extern void fio_sem_down(struct fio_sem *); +extern void fio_sem_up(struct fio_sem *); + +#endif