Allow randommap allocation to fail
[fio.git] / fio.c
diff --git a/fio.c b/fio.c
index c1894f5f771fdeb92f1f05cc18ad55d645782a56..231a581f5478df56054531137d2f1b17ebc3ba57 100644 (file)
--- a/fio.c
+++ b/fio.c
@@ -74,10 +74,12 @@ static void terminate_threads(int group_id)
        struct thread_data *td;
        int i;
 
+       dprint(FD_PROCESS, "terminate group_id=%d\n", group_id);
+
        for_each_td(td, i) {
                if (group_id == TERMINATE_ALL || groupid == td->groupid) {
-                       dprint(FD_PROCESS, "setting terminate on %d\n",
-                                                               td->pid);
+                       dprint(FD_PROCESS, "setting terminate on %s/%d\n",
+                                                       td->o.name, td->pid);
                        td->terminate = 1;
                        td->o.start_delay = 0;
 
@@ -1108,20 +1110,11 @@ static void reap_threads(int *nr_running, int *t_rate, int *m_rate)
                pending++;
                continue;
 reaped:
-               if (td->o.use_thread) {
-                       long ret;
-
-                       dprint(FD_PROCESS, "joining tread %d\n", td->pid);
-                       if (pthread_join(td->thread, (void *) &ret)) {
-                               dprint(FD_PROCESS, "join failed %ld\n", ret);
-                               perror("pthread_join");
-                       }
-               }
-
                (*nr_running)--;
                (*m_rate) -= td->o.ratemin;
                (*t_rate) -= td->o.rate;
-               pending--;
+               if (!td->pid)
+                       pending--;
 
                if (td->error)
                        exit_value++;
@@ -1232,8 +1225,11 @@ static void run_threads(void)
                                        continue;
                        }
 
-                       if (td->o.stonewall && (nr_started || nr_running))
+                       if (td->o.stonewall && (nr_started || nr_running)) {
+                               dprint(FD_PROCESS, "%s: stonewall wait\n",
+                                                       td->o.name);
                                break;
+                       }
 
                        /*
                         * Set state to created. Thread will transition
@@ -1247,10 +1243,12 @@ static void run_threads(void)
                                dprint(FD_PROCESS, "will pthread_create\n");
                                if (pthread_create(&td->thread, NULL,
                                                   thread_main, td)) {
-                                       perror("thread_create");
+                                       perror("pthread_create");
                                        nr_started--;
                                        break;
                                }
+                               if (pthread_detach(td->thread) < 0)
+                                       perror("pthread_detach");
                        } else {
                                dprint(FD_PROCESS, "will fork\n");
                                if (!fork()) {