Client reference fixes

Signed-off-by: Jens Axboe <axboe@kernel.dk>
diff --git a/client.c b/client.c
index f2c157a..0da4f47 100644
--- a/client.c
+++ b/client.c
@@ -97,23 +97,11 @@
 	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;
 
-	dprint(FD_NET, "client: removed <%s>\n", client->hostname);
-	flist_del(&client->list);
-
-	fio_client_remove_hash(client);
-
-	if (!flist_empty(&client->eta_list)) {
-		flist_del_init(&client->eta_list);
-		fio_client_dec_jobs_eta(client->eta_in_flight, client->ops->eta);
-	}
-
 	free(client->hostname);
 	if (client->argv)
 		free(client->argv);
@@ -121,13 +109,28 @@
 		free(client->name);
 
 	free(client);
-	nr_clients--;
-	sum_stat_clients--;
 }
 
-void fio_put_client(struct fio_client *client)
+static void remove_client(struct fio_client *client)
 {
-	remove_client(client);
+	assert(client->refs);
+
+	dprint(FD_NET, "client: removed <%s>\n", client->hostname);
+
+	if (!flist_empty(&client->list))
+		flist_del_init(&client->list);
+
+	fio_client_remove_hash(client);
+
+	if (!flist_empty(&client->eta_list)) {
+		flist_del_init(&client->eta_list);
+		fio_client_dec_jobs_eta(client->eta_in_flight, client->ops->eta);
+	}
+
+	nr_clients--;
+	sum_stat_clients--;
+
+	fio_put_client(client);
 }
 
 struct fio_client *fio_get_client(struct fio_client *client)
@@ -572,12 +575,9 @@
 	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 @@
 	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 76bbbf5..57a333b 100644
--- a/gfio.c
+++ b/gfio.c
@@ -1736,6 +1736,7 @@
 		i++;
 	}
 
+	ge->nr_job_files = 0;
 	return ret;
 }