From 3af452010d32267d085ba1612ebc0a40812c28a9 Mon Sep 17 00:00:00 2001 From: Jens Axboe Date: Tue, 13 Mar 2012 09:59:53 +0100 Subject: [PATCH] Client reference fixes Signed-off-by: Jens Axboe --- client.c | 43 ++++++++++++++++++++++--------------------- gfio.c | 1 + 2 files changed, 23 insertions(+), 21 deletions(-) diff --git a/client.c b/client.c index f2c157ae..0da4f47a 100644 --- a/client.c +++ b/client.c @@ -97,15 +97,28 @@ static struct fio_client *find_client_by_fd(int fd) return NULL; } -static void remove_client(struct fio_client *client) +void fio_put_client(struct fio_client *client) { - assert(client->refs); - if (--client->refs) return; + free(client->hostname); + if (client->argv) + free(client->argv); + if (client->name) + free(client->name); + + free(client); +} + +static void remove_client(struct fio_client *client) +{ + assert(client->refs); + dprint(FD_NET, "client: removed <%s>\n", client->hostname); - flist_del(&client->list); + + if (!flist_empty(&client->list)) + flist_del_init(&client->list); fio_client_remove_hash(client); @@ -114,20 +127,10 @@ static void remove_client(struct fio_client *client) fio_client_dec_jobs_eta(client->eta_in_flight, client->ops->eta); } - free(client->hostname); - if (client->argv) - free(client->argv); - if (client->name) - free(client->name); - - free(client); nr_clients--; sum_stat_clients--; -} -void fio_put_client(struct fio_client *client) -{ - remove_client(client); + fio_put_client(client); } struct fio_client *fio_get_client(struct fio_client *client) @@ -572,12 +575,9 @@ int fio_client_send_ini(struct fio_client *client, const char *filename) int ret; ret = __fio_client_send_ini(client, filename); - if (ret) { - remove_client(client); - return ret; - } + if (!ret) + client->sent_job = 1; - client->sent_job = 1; return ret; } @@ -589,7 +589,8 @@ int fio_clients_send_ini(const char *filename) flist_for_each_safe(entry, tmp, &client_list) { client = flist_entry(entry, struct fio_client, list); - fio_client_send_ini(client, filename); + if (fio_client_send_ini(client, filename)) + remove_client(client); } return !nr_clients; diff --git a/gfio.c b/gfio.c index 76bbbf5c..57a333b3 100644 --- a/gfio.c +++ b/gfio.c @@ -1736,6 +1736,7 @@ static int send_job_files(struct gui_entry *ge) i++; } + ge->nr_job_files = 0; return ret; } -- 2.25.1