server: malloc/free fix
[fio.git] / server.c
index 38698bc3a126f8df9979a3c8af562f844c18c3d0..648758e2d8690175f9071b8eeaa681a86c735fa8 100644 (file)
--- a/server.c
+++ b/server.c
@@ -25,7 +25,7 @@ static char *job_buf;
 static unsigned int job_cur_len;
 static unsigned int job_max_len;
 
-static int server_fd;
+static int server_fd = -1;
 
 int fio_send_data(int sk, const void *p, unsigned int len)
 {
@@ -222,6 +222,7 @@ static int nak_command(int sk, struct fio_net_cmd *cmd)
 
 static int send_quit_command(void)
 {
+       dprint(FD_NET, "server: sending quit\n");
        return send_simple_command(server_fd, FIO_NET_CMD_QUIT, 0);
 }
 
@@ -258,6 +259,8 @@ static int handle_command(struct fio_net_cmd *cmd)
 {
        int ret;
 
+       dprint(FD_NET, "server: got opcode %d\n", cmd->opcode);
+
        switch (cmd->opcode) {
        case FIO_NET_CMD_QUIT:
                exit_backend = 1;
@@ -299,6 +302,7 @@ static int handle_connection(int sk)
                        break;
 
                free(cmd);
+               cmd = NULL;
        }
 
        if (cmd)
@@ -343,6 +347,8 @@ again:
                return -1;
        }
 
+       dprint(FD_NET, "server got a connection\n");
+
        server_fd = sk;
 
        exitval = handle_connection(sk);
@@ -364,6 +370,8 @@ int fio_server(void)
        unsigned int len;
        int sk, opt, ret;
 
+       dprint(FD_NET, "starting server\n");
+
        sk = socket(AF_INET, SOCK_STREAM, 0);
        if (sk < 0) {
                log_err("fio: socket: %s\n", strerror(errno));
@@ -409,7 +417,10 @@ int fio_server(void)
 
 int fio_server_text_output(const char *buf, unsigned int len)
 {
-       return fio_net_send_cmd(server_fd, FIO_NET_CMD_TEXT, buf, len);
+       if (server_fd != -1)
+               return fio_net_send_cmd(server_fd, FIO_NET_CMD_TEXT, buf, len);
+
+       return 0;
 }
 
 int fio_server_log(const char *format, ...)