We have to remember to free the condvar, so add a __fio_mutex_remove()
for cases that init a mutex inside an smalloc'ed region with
__fio_mutex_init().
Signed-off-by: Jens Axboe <axboe@fb.com>
ff = fio_hash_find(hash);
if (ff) {
- ff->references--;
+ int refs = --ff->references;
fio_mutex_up(&ff->lock);
- if (!ff->references) {
+ if (!refs) {
flist_del(&ff->list);
+ __fio_mutex_remove(&ff->lock);
sfree(ff);
}
} else
#include "fio_time.h"
#include "gettime.h"
-void fio_mutex_remove(struct fio_mutex *mutex)
+void __fio_mutex_remove(struct fio_mutex *mutex)
{
assert(mutex->magic == FIO_MUTEX_MAGIC);
pthread_cond_destroy(&mutex->cond);
+}
+
+void fio_mutex_remove(struct fio_mutex *mutex)
+{
+ __fio_mutex_remove(mutex);
munmap((void *) mutex, sizeof(*mutex));
}
extern int __fio_mutex_init(struct fio_mutex *, int);
extern struct fio_mutex *fio_mutex_init(int);
+extern void __fio_mutex_remove(struct fio_mutex *);
extern void fio_mutex_remove(struct fio_mutex *);
extern void fio_mutex_up(struct fio_mutex *);
extern void fio_mutex_down(struct fio_mutex *);
*datap = data;
sfree(rep->data);
+ __fio_mutex_remove(&rep->lock);
sfree(rep);
return 0;
}