mutex error handling

Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
diff --git a/mutex.c b/mutex.c
index bb417c2..6ec5d57 100644
--- a/mutex.c
+++ b/mutex.c
@@ -16,8 +16,8 @@
 
 struct fio_sem *fio_sem_init(int value)
 {
+	struct fio_sem *sem = NULL;
 	pthread_mutexattr_t attr;
-	struct fio_sem *sem;
 	char sem_name[32];
 	int fd;
 
@@ -30,7 +30,7 @@
 
 	if (ftruncate(fd, sizeof(struct fio_sem)) < 0) {
 		perror("ftruncate sem");
-		return NULL;
+		goto err;
 	}
 
 	sem = mmap(NULL, sizeof(struct fio_sem), PROT_READ | PROT_WRITE,
@@ -38,8 +38,8 @@
 	if (sem == MAP_FAILED) {
 		perror("mmap sem");
 		close(fd);
-		unlink(sem_name);
-		return NULL;
+		sem = NULL;
+		goto err;
 	}
 
 	close(fd);
@@ -61,7 +61,8 @@
 
 	return sem;
 err:
-	munmap(sem, sizeof(*sem));
+	if (sem)
+		munmap(sem, sizeof(*sem));
 	unlink(sem_name);
 	return NULL;
 }