client: fix double removal of client on job file open failure
[fio.git] / client.c
index c61301de99dd2bfbcb9c4d35b91108fa0ba276be..6bc114541062231f24d9bc0215e47102e05ec868 100644 (file)
--- a/client.c
+++ b/client.c
@@ -226,13 +226,12 @@ static void fio_drain_client_text(struct fio_client *client)
                if (!cmd)
                        break;
 
-               if (cmd->opcode != FIO_NET_CMD_TEXT) {
-                       free(cmd);
-                       continue;
+               if (cmd->opcode == FIO_NET_CMD_TEXT) {
+                       convert_text(cmd);
+                       client->ops->text(client, cmd);
                }
 
-               convert_text(cmd);
-               client->ops->text(client, cmd);
+               free(cmd);
        } while (1);
 }
 
@@ -817,6 +816,8 @@ int fio_clients_send_ini(const char *filename)
        struct flist_head *entry, *tmp;
 
        flist_for_each_safe(entry, tmp, &client_list) {
+               bool failed = false;
+
                client = flist_entry(entry, struct fio_client, list);
 
                if (client->nr_files) {
@@ -828,12 +829,13 @@ int fio_clients_send_ini(const char *filename)
                                cf = &client->files[i];
 
                                if (fio_client_send_cf(client, cf)) {
+                                       failed = true;
                                        remove_client(client);
                                        break;
                                }
                        }
                }
-               if (client->sent_job)
+               if (client->sent_job || failed)
                        continue;
                if (!filename || fio_client_send_ini(client, filename, 0))
                        remove_client(client);
@@ -1461,7 +1463,6 @@ static struct cmd_iolog_pdu *convert_iolog(struct fio_net_cmd *cmd,
                return NULL;
 #endif
                ret = convert_iolog_gz(cmd, pdu);
-               printf("compressed iolog, %p\n", ret);
                if (!ret) {
                        log_err("fio: failed decompressing log\n");
                        return NULL;