Implement nice() for Windows
[fio.git] / client.c
index c29151dfde11583bc9cc9e96c4896e6214153e81..9698122da8f522786b14482dd61e8771c8d2368c 100644 (file)
--- a/client.c
+++ b/client.c
@@ -1183,7 +1183,7 @@ void fio_client_sum_jobs_eta(struct jobs_eta *dst, struct jobs_eta *je)
        strcpy((char *) dst->run_str, (char *) je->run_str);
 }
 
-static void remove_reply_cmd(struct fio_client *client, struct fio_net_cmd *cmd)
+static bool remove_reply_cmd(struct fio_client *client, struct fio_net_cmd *cmd)
 {
        struct fio_net_cmd_reply *reply = NULL;
        struct flist_head *entry;
@@ -1199,12 +1199,13 @@ static void remove_reply_cmd(struct fio_client *client, struct fio_net_cmd *cmd)
 
        if (!reply) {
                log_err("fio: client: unable to find matching tag (%llx)\n", (unsigned long long) cmd->tag);
-               return;
+               return false;
        }
 
        flist_del(&reply->list);
        cmd->tag = reply->saved_tag;
        free(reply);
+       return true;
 }
 
 int fio_client_wait_for_reply(struct fio_client *client, uint64_t tag)
@@ -1294,7 +1295,7 @@ static int fio_client_handle_iolog(struct fio_client *client,
 {
        struct cmd_iolog_pdu *pdu;
        bool store_direct;
-       char * log_pathname;
+       char *log_pathname;
 
        pdu = convert_iolog(cmd, &store_direct);
        if (!pdu) {
@@ -1302,12 +1303,14 @@ static int fio_client_handle_iolog(struct fio_client *client,
                return 1;
        }
 
-       /* generate a unique pathname for the log file using hostname */
-       log_pathname = malloc(PATH_MAX+10);
+        /* allocate buffer big enough for next sprintf() call */
+       log_pathname = malloc(10 + strlen((char *)pdu->name) +
+                       strlen(client->hostname));
        if (!log_pathname) {
                log_err("fio: memory allocation of unique pathname failed");
                return -1;
        }
+       /* generate a unique pathname for the log file using hostname */
        sprintf(log_pathname, "%s.%s", pdu->name, client->hostname);
 
        if (store_direct) {
@@ -1318,7 +1321,7 @@ static int fio_client_handle_iolog(struct fio_client *client,
                fd = open((const char *) log_pathname,
                                O_WRONLY | O_CREAT | O_TRUNC, 0644);
                if (fd < 0) {
-                       log_err("fio: open log %s: %s\n", 
+                       log_err("fio: open log %s: %s\n",
                                log_pathname, strerror(errno));
                        return 1;
                }
@@ -1337,7 +1340,7 @@ static int fio_client_handle_iolog(struct fio_client *client,
                FILE *f;
                f = fopen((const char *) log_pathname, "w");
                if (!f) {
-                       log_err("fio: fopen log %s : %s\n", 
+                       log_err("fio: fopen log %s : %s\n",
                                log_pathname, strerror(errno));
                        return 1;
                }
@@ -1663,7 +1666,8 @@ int fio_handle_client(struct fio_client *client)
        case FIO_NET_CMD_ETA: {
                struct jobs_eta *je = (struct jobs_eta *) cmd->payload;
 
-               remove_reply_cmd(client, cmd);
+               if (!remove_reply_cmd(client, cmd))
+                       break;
                convert_jobs_eta(je);
                handle_eta(client, cmd);
                break;