sfree(NULL) is ok
[fio.git] / fio.c
diff --git a/fio.c b/fio.c
index 7d4c96a2b8a5045cda742f4be7842deb66529637..ae62d23329839c1c9bc28c5f57a6a826cb42c6f1 100644 (file)
--- a/fio.c
+++ b/fio.c
@@ -40,6 +40,8 @@
 #include "verify.h"
 #include "diskutil.h"
 #include "cgroup.h"
+#include "profile.h"
+#include "lib/rand.h"
 
 unsigned long page_mask;
 unsigned long page_size;
@@ -134,7 +136,7 @@ static void sig_quit(int sig)
 static void sig_int(int sig)
 {
        if (threads) {
-               printf("\nfio: terminating on signal %d\n", sig);
+               log_info("\nfio: terminating on signal %d\n", sig);
                fflush(stdout);
                terminate_threads(TERMINATE_ALL);
        }
@@ -432,6 +434,8 @@ static void do_verify(struct thread_data *td)
        int ret, min_events;
        unsigned int i;
 
+       dprint(FD_VERIFY, "starting loop\n");
+
        /*
         * sync io first and invalidate cache, to make sure we really
         * read from disk.
@@ -569,6 +573,8 @@ sync_done:
                cleanup_pending_aio(td);
 
        td_set_runstate(td, TD_RUNNING);
+
+       dprint(FD_VERIFY, "exiting loop\n");
 }
 
 /*
@@ -1041,6 +1047,15 @@ static void *thread_main(void *data)
         */
        fio_mutex_remove(td->mutex);
 
+       if (td->o.uid != -1U && setuid(td->o.uid)) {
+               td_verror(td, errno, "setuid");
+               goto err;
+       }
+       if (td->o.gid != -1U && setgid(td->o.gid)) {
+               td_verror(td, errno, "setgid");
+               goto err;
+       }
+
        /*
         * May alter parameters that init_io_u() will use, so we need to
         * do this first.
@@ -1201,7 +1216,7 @@ static void *thread_main(void *data)
 
 err:
        if (td->error)
-               printf("fio: pid=%d, err=%d/%s\n", (int) td->pid, td->error,
+               log_info("fio: pid=%d, err=%d/%s\n", (int) td->pid, td->error,
                                                        td->verror);
 
        if (td->o.verify_async)
@@ -1403,17 +1418,17 @@ static void run_threads(void)
                return;
 
        if (!terse_output) {
-               printf("Starting ");
+               log_info("Starting ");
                if (nr_thread)
-                       printf("%d thread%s", nr_thread,
+                       log_info("%d thread%s", nr_thread,
                                                nr_thread > 1 ? "s" : "");
                if (nr_process) {
                        if (nr_thread)
                                printf(" and ");
-                       printf("%d process%s", nr_process,
+                       log_info("%d process%s", nr_process,
                                                nr_process > 1 ? "es" : "");
                }
-               printf("\n");
+               log_info("\n");
                fflush(stdout);
        }
 
@@ -1622,6 +1637,7 @@ int main(int argc, char *argv[])
        long ps;
 
        sinit();
+       init_rand(&__fio_rand_state);
 
        /*
         * We need locale for number printing, if it isn't set then just
@@ -1644,6 +1660,9 @@ int main(int argc, char *argv[])
        if (parse_options(argc, argv))
                return 1;
 
+       if (exec_profile && load_profile(exec_profile))
+               return 1;
+
        if (!thread_number)
                return 0;
 
@@ -1675,8 +1694,7 @@ int main(int argc, char *argv[])
 
        cgroup_kill(cgroup_list);
        sfree(cgroup_list);
-       if (cgroup_mnt)
-               sfree(cgroup_mnt);
+       sfree(cgroup_mnt);
 
        fio_mutex_remove(startup_mutex);
        fio_mutex_remove(writeout_mutex);