return fio_send_data(sk, &cmd, sizeof(cmd));
}
-static int send_quit_command(void)
+static int fio_server_send_quit_cmd(void)
{
dprint(FD_NET, "server: sending quit\n");
return fio_net_send_simple_cmd(server_fd, FIO_NET_CMD_QUIT, 0);
fio_net_send_simple_cmd(server_fd, FIO_NET_CMD_START, 0);
ret = exec_run();
- send_quit_command();
+ fio_server_send_quit_cmd();
reset_fio_state();
return ret;
}
fio_net_send_simple_cmd(server_fd, FIO_NET_CMD_START, 0);
ret = exec_run();
- send_quit_command();
+ fio_server_send_quit_cmd();
reset_fio_state();
return ret;
}
struct pollfd pfd;
int ret, sk, flags, exitval = 0;
+ dprint(FD_NET, "server enter accept loop\n");
+
flags = fcntl(listen_sk, F_GETFL);
flags |= O_NONBLOCK;
fcntl(listen_sk, F_SETFL, flags);
struct cmd_ts_pdu p;
int i, j;
+ dprint(FD_NET, "server sending end stats\n");
+
memset(&p, 0, sizeof(p));
strcpy(p.ts.name, ts->name);
{
struct group_run_stats gs;
+ dprint(FD_NET, "server sending group run stats\n");
+
convert_gs(&gs, rs);
fio_net_send_cmd(server_fd, FIO_NET_CMD_GS, &gs, sizeof(gs));
}
return;
}
+ dprint(FD_NET, "server sending status\n");
+
je->nr_running = cpu_to_le32(je->nr_running);
je->nr_ramp = cpu_to_le32(je->nr_ramp);
je->nr_pending = cpu_to_le32(je->nr_pending);
va_list args;
size_t len;
+ dprint(FD_NET, "server log\n");
+
va_start(args, format);
len = vsnprintf(buffer, sizeof(buffer), format, args);
va_end(args);
return ret;
}
+static void sig_int(int sig)
+{
+ fio_terminate_threads(TERMINATE_ALL);
+ exit_backend = 1;
+}
+
+static void server_signal_handler(void)
+{
+ struct sigaction act;
+
+ memset(&act, 0, sizeof(act));
+ act.sa_handler = sig_int;
+ act.sa_flags = SA_RESTART;
+ sigaction(SIGINT, &act, NULL);
+
+ memset(&act, 0, sizeof(act));
+ act.sa_handler = sig_int;
+ act.sa_flags = SA_RESTART;
+ sigaction(SIGTERM, &act, NULL);
+}
+
int fio_start_server(int daemonize)
{
pid_t pid;
+ server_signal_handler();
+
if (!daemonize)
return fio_server();