Client reference fixes
authorJens Axboe <axboe@kernel.dk>
Tue, 13 Mar 2012 08:59:53 +0000 (09:59 +0100)
committerJens Axboe <axboe@kernel.dk>
Tue, 13 Mar 2012 08:59:53 +0000 (09:59 +0100)
Signed-off-by: Jens Axboe <axboe@kernel.dk>
client.c
gfio.c

index f2c157ae7525a030f6b23c7e9ad15b4032ad5c8d..0da4f47a5b24f7eea6d9f2f2613c2ef2005c1ccc 100644 (file)
--- a/client.c
+++ b/client.c
@@ -97,15 +97,28 @@ static struct fio_client *find_client_by_fd(int fd)
        return NULL;
 }
 
        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;
 
        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);
        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);
 
 
        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);
        }
 
                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--;
        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)
 }
 
 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);
        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;
 }
 
        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);
 
        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;
        }
 
        return !nr_clients;
diff --git a/gfio.c b/gfio.c
index 76bbbf5c340b985fd19e78f5fa55b7a66dfbb37e..57a333b3c260ac943dd1b8203b51d5fcaee2b05a 100644 (file)
--- a/gfio.c
+++ b/gfio.c
@@ -1736,6 +1736,7 @@ static int send_job_files(struct gui_entry *ge)
                i++;
        }
 
                i++;
        }
 
+       ge->nr_job_files = 0;
        return ret;
 }
 
        return ret;
 }