summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHans de Goede <hdegoede@redhat.com>2013-02-22 16:53:03 +0100
committerHans de Goede <hdegoede@redhat.com>2013-02-22 17:54:23 +0100
commit80276ad30b1d60f49c33ce91a59e68ca2ef53f34 (patch)
treec51ba0eb7c51139649338c233d3552d09a8ba09e
parent765803fce0c880b471e6f2e03b6641a92d05a919 (diff)
downloadvd_agent-80276ad30b1d60f49c33ce91a59e68ca2ef53f34.tar.gz
vd_agent-80276ad30b1d60f49c33ce91a59e68ca2ef53f34.tar.xz
vd_agent-80276ad30b1d60f49c33ce91a59e68ca2ef53f34.zip
file-xfers: unlink the (partial) file on cancel / error
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
-rw-r--r--src/vdagent-file-xfers.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/src/vdagent-file-xfers.c b/src/vdagent-file-xfers.c
index a562def..f2f3a4c 100644
--- a/src/vdagent-file-xfers.c
+++ b/src/vdagent-file-xfers.c
@@ -60,10 +60,11 @@ static void vdagent_file_xfer_task_free(gpointer data)
g_return_if_fail(task != NULL);
if (task->file_fd > 0) {
+ syslog(LOG_ERR, "file-xfer: Removing task %u and file %s due to error",
+ task->id, task->file_name);
close(task->file_fd);
- }
-
- if (task->debug)
+ unlink(task->file_name);
+ } else if (task->debug)
syslog(LOG_DEBUG, "file-xfer: Removing task %u %s",
task->id, task->file_name);
@@ -239,12 +240,14 @@ void vdagent_file_xfers_data(struct vdagent_file_xfers *xfers,
task->read_bytes += msg->size;
if (task->read_bytes >= task->file_size) {
- if (task->read_bytes > task->file_size) {
+ if (task->read_bytes == task->file_size) {
+ if (xfers->debug)
+ syslog(LOG_DEBUG, "file-xfer: task %u %s has completed",
+ task->id, task->file_name);
+ close(task->file_fd);
+ task->file_fd = -1;
+ } else
syslog(LOG_ERR, "file-xfer: error received too much data");
- }
- if (xfers->debug)
- syslog(LOG_DEBUG, "file-xfer: task %u %s has completed",
- task->id, task->file_name);
g_hash_table_remove(xfers->xfers, GINT_TO_POINTER(msg->id));
}
}