X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=client.c;h=110a01bd99564280245cd59ca7ff27759bf3e936;hp=af3407cefe95a55fc211d5deb92bd4687fd922fc;hb=f02f7dace83f81427482fd906bef203b360d26f4;hpb=cce8514585480bfff0774f285efe633ed1bb1d84 diff --git a/client.c b/client.c index af3407ce..110a01bd 100644 --- a/client.c +++ b/client.c @@ -184,6 +184,17 @@ void fio_put_client(struct fio_client *client) free(client); } +static int fio_client_dec_jobs_eta(struct client_eta *eta, client_eta_op eta_fn) +{ + if (!--eta->pending) { + eta_fn(&eta->eta); + free(eta); + return 0; + } + + return 1; +} + static void remove_client(struct fio_client *client) { assert(client->refs); @@ -1091,14 +1102,6 @@ void fio_client_sum_jobs_eta(struct jobs_eta *dst, struct jobs_eta *je) strcpy((char *) dst->run_str, (char *) je->run_str); } -void fio_client_dec_jobs_eta(struct client_eta *eta, client_eta_op eta_fn) -{ - if (!--eta->pending) { - eta_fn(&eta->eta); - free(eta); - } -} - static void remove_reply_cmd(struct fio_client *client, struct fio_net_cmd *cmd) { struct fio_net_cmd_reply *reply = NULL; @@ -1573,8 +1576,10 @@ static void request_client_etas(struct client_ops *ops) (uintptr_t) eta, &client->cmd_list); } - while (skipped--) - fio_client_dec_jobs_eta(eta, ops->eta); + while (skipped--) { + if (!fio_client_dec_jobs_eta(eta, ops->eta)) + break; + } dprint(FD_NET, "client: requested eta tag %p\n", eta); }