Use poll() for connect loop
[fio.git] / fio.c
diff --git a/fio.c b/fio.c
index 4514840dbb11027da8127a64e379ddb21d7acd4f..a15080b4a26e89bebea6edf5def458e701e0cddd 100644 (file)
--- a/fio.c
+++ b/fio.c
@@ -46,6 +46,7 @@
 #include "profile.h"
 #include "lib/rand.h"
 #include "memalign.h"
+#include "server.h"
 
 unsigned long page_mask;
 unsigned long page_size;
@@ -122,6 +123,7 @@ static void sig_int(int sig)
 {
        if (threads) {
                log_info("\nfio: terminating on signal %d\n", sig);
+               exit_backend = 1;
                fflush(stdout);
                exit_value = 128;
                terminate_threads(TERMINATE_ALL);
@@ -137,7 +139,9 @@ static void *disk_thread_main(void *data)
                if (!threads)
                        break;
                update_io_ticks();
-               print_thread_status();
+
+               if (!is_backend)
+                       print_thread_status();
        }
 
        return NULL;
@@ -1502,10 +1506,8 @@ static void run_threads(void)
        for_each_td(td, i) {
                print_status_init(td->thread_number - 1);
 
-               if (!td->o.create_serialize) {
-                       init_disk_util(td);
+               if (!td->o.create_serialize)
                        continue;
-               }
 
                /*
                 * do file setup here so it happens sequentially,
@@ -1533,8 +1535,6 @@ static void run_threads(void)
                                        td_io_close_file(td, f);
                        }
                }
-
-               init_disk_util(td);
        }
 
        set_genesis_time();
@@ -1573,6 +1573,8 @@ static void run_threads(void)
                                break;
                        }
 
+                       init_disk_util(td);
+
                        /*
                         * Set state to created. Thread will transition
                         * to TD_INITIALIZED when it's done setting up.
@@ -1692,35 +1694,8 @@ static void run_threads(void)
        fio_unpin_memory();
 }
 
-int main(int argc, char *argv[], char *envp[])
+int exec_run(void)
 {
-       long ps;
-
-       arch_init(envp);
-
-       sinit();
-
-       /*
-        * We need locale for number printing, if it isn't set then just
-        * go with the US format.
-        */
-       if (!getenv("LC_NUMERIC"))
-               setlocale(LC_NUMERIC, "en_US");
-
-       ps = sysconf(_SC_PAGESIZE);
-       if (ps < 0) {
-               log_err("Failed to get page size\n");
-               return 1;
-       }
-
-       page_size = ps;
-       page_mask = ps - 1;
-
-       fio_keywords_init();
-
-       if (parse_options(argc, argv))
-               return 1;
-
        if (exec_profile && load_profile(exec_profile))
                return 1;
 
@@ -1764,3 +1739,44 @@ int main(int argc, char *argv[], char *envp[])
        fio_mutex_remove(writeout_mutex);
        return exit_value;
 }
+
+void reset_fio_state(void)
+{
+       groupid = 0;
+       thread_number = 0;
+       nr_process = 0;
+       nr_thread = 0;
+       done_secs = 0;
+}
+
+int main(int argc, char *argv[], char *envp[])
+{
+       long ps;
+
+       arch_init(envp);
+
+       sinit();
+
+       /*
+        * We need locale for number printing, if it isn't set then just
+        * go with the US format.
+        */
+       if (!getenv("LC_NUMERIC"))
+               setlocale(LC_NUMERIC, "en_US");
+
+       ps = sysconf(_SC_PAGESIZE);
+       if (ps < 0) {
+               log_err("Failed to get page size\n");
+               return 1;
+       }
+
+       page_size = ps;
+       page_mask = ps - 1;
+
+       fio_keywords_init();
+
+       if (parse_options(argc, argv))
+               return 1;
+
+       return exec_run();
+}