So we can exit nicely when asked to.
Signed-off-by: Jens Axboe <axboe@kernel.dk>
#include "profile.h"
#include "lib/rand.h"
#include "memalign.h"
#include "profile.h"
#include "lib/rand.h"
#include "memalign.h"
unsigned long page_mask;
unsigned long page_size;
unsigned long page_mask;
unsigned long page_size;
{
if (threads) {
log_info("\nfio: terminating on signal %d\n", sig);
{
if (threads) {
log_info("\nfio: terminating on signal %d\n", sig);
fflush(stdout);
exit_value = 128;
terminate_threads(TERMINATE_ALL);
fflush(stdout);
exit_value = 128;
terminate_threads(TERMINATE_ALL);
static int net_port = 8765;
static int net_port = 8765;
static int accept_loop(int listen_sk)
{
struct sockaddr addr;
unsigned int len = sizeof(addr);
static int accept_loop(int listen_sk)
{
struct sockaddr addr;
unsigned int len = sizeof(addr);
+ struct pollfd pfd;
+ int ret, sk, flags;
+ flags = fcntl(listen_sk, F_GETFL);
+ flags |= O_NONBLOCK;
+ fcntl(listen_sk, F_SETFL, flags);
+ pfd.fd = listen_sk;
+ pfd.events = POLLIN;
+ do {
+ ret = poll(&pfd, 1, 100);
+ if (ret < 0) {
+ if (errno == EINTR)
+ break;
+ perror("poll");
+ goto out;
+ } else if (!ret)
+ continue;
+
+ if (pfd.revents & POLLIN)
+ break;
+ } while (!exit_backend);
+
+ if (exit_backend)
+ goto out;
+
sk = accept(listen_sk, &addr, &len);
if (sk < 0) {
log_err("fio: accept failed\n");
sk = accept(listen_sk, &addr, &len);
if (sk < 0) {
log_err("fio: accept failed\n");
+ while (!exit_backend) {
ret = recv(sk, buf, 4096, 0);
if (ret > 0) {
if (!strncmp("FIO_QUIT", buf, 8)) {
ret = recv(sk, buf, 4096, 0);
if (ret > 0) {
if (!strncmp("FIO_QUIT", buf, 8)) {
break;
}
parse_jobs_ini(buf, 1, 0);
break;
}
parse_jobs_ini(buf, 1, 0);
#define FIO_SERVER_H
extern int fio_server(void);
#define FIO_SERVER_H
extern int fio_server(void);
+extern int exit_backend;