OOM fixes

Hit this with many threads running.

Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
diff --git a/fio.c b/fio.c
index b0afdcc..7110e87 100644
--- a/fio.c
+++ b/fio.c
@@ -692,33 +692,33 @@
 	INIT_LIST_HEAD(&td->io_log_list);
 
 	if (init_io_u(td))
-		goto err;
+		goto err_sem;
 
 	if (fio_setaffinity(td) == -1) {
 		td_verror(td, errno, "cpu_set_affinity");
-		goto err;
+		goto err_sem;
 	}
 
 	if (init_iolog(td))
-		goto err;
+		goto err_sem;
 
 	if (td->ioprio) {
 		if (ioprio_set(IOPRIO_WHO_PROCESS, 0, td->ioprio) == -1) {
 			td_verror(td, errno, "ioprio_set");
-			goto err;
+			goto err_sem;
 		}
 	}
 
 	if (nice(td->nice) == -1) {
 		td_verror(td, errno, "nice");
-		goto err;
+		goto err_sem;
 	}
 
 	if (init_random_state(td))
-		goto err;
+		goto err_sem;
 
 	if (td->ioscheduler && switch_ioscheduler(td))
-		goto err;
+		goto err_sem;
 
 	td_set_runstate(td, TD_INITIALIZED);
 	fio_sem_up(startup_sem);
@@ -821,6 +821,9 @@
 	cleanup_io_u(td);
 	td_set_runstate(td, TD_EXITED);
 	return (void *) (unsigned long) td->error;
+err_sem:
+	fio_sem_up(startup_sem);
+	goto err;
 }
 
 /*