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;
}
switch (cmd->opcode) {
case FIO_NET_CMD_QUIT:
fio_terminate_threads(TERMINATE_ALL);
- send_quit_command();
return -1;
case FIO_NET_CMD_EXIT:
exit_backend = 1;
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();