100 lines
2.6 KiB
Diff
100 lines
2.6 KiB
Diff
|
From aefc220c027c98c0877cbb6dc7140e72f119262b Mon Sep 17 00:00:00 2001
|
||
|
From: Frediano Ziglio <fziglio@redhat.com>
|
||
|
Date: Fri, 25 May 2018 20:01:11 +0100
|
||
|
Subject: [PATCH 15/43] file_xfer: Use destructor for FileXferTask
|
||
|
|
||
|
Limit too much manual work.
|
||
|
By default delete the file, unless success() is called.
|
||
|
|
||
|
Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
|
||
|
Acked-by: Christophe Fergeau <cfergeau@redhat.com>
|
||
|
---
|
||
|
vdagent/file_xfer.cpp | 24 +++++++++++++++---------
|
||
|
vdagent/file_xfer.h | 4 +++-
|
||
|
2 files changed, 18 insertions(+), 10 deletions(-)
|
||
|
|
||
|
diff --git a/vdagent/file_xfer.cpp b/vdagent/file_xfer.cpp
|
||
|
index 8203b99..ff4c0b9 100644
|
||
|
--- a/vdagent/file_xfer.cpp
|
||
|
+++ b/vdagent/file_xfer.cpp
|
||
|
@@ -46,7 +46,6 @@ void FileXfer::reset()
|
||
|
|
||
|
for (iter = _tasks.begin(); iter != _tasks.end(); iter++) {
|
||
|
task = iter->second;
|
||
|
- task->cancel();
|
||
|
delete task;
|
||
|
}
|
||
|
_tasks.clear();
|
||
|
@@ -181,14 +180,11 @@ bool FileXfer::handle_data(VDAgentFileXferDataMessage* data,
|
||
|
return false;
|
||
|
}
|
||
|
vd_printf("%u completed", iter->first);
|
||
|
+ task->success();
|
||
|
status->result = VD_AGENT_FILE_XFER_STATUS_SUCCESS;
|
||
|
|
||
|
fin:
|
||
|
if (task) {
|
||
|
- CloseHandle(task->handle);
|
||
|
- if (status->result != VD_AGENT_FILE_XFER_STATUS_SUCCESS) {
|
||
|
- DeleteFile(task->name);
|
||
|
- }
|
||
|
_tasks.erase(iter);
|
||
|
delete task;
|
||
|
}
|
||
|
@@ -196,10 +192,21 @@ fin:
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
-void FileXferTask::cancel()
|
||
|
+FileXferTask::~FileXferTask()
|
||
|
{
|
||
|
- CloseHandle(handle);
|
||
|
- DeleteFile(name);
|
||
|
+ if (handle != INVALID_HANDLE_VALUE) {
|
||
|
+ CloseHandle(handle);
|
||
|
+ DeleteFile(name);
|
||
|
+ }
|
||
|
+}
|
||
|
+
|
||
|
+void FileXferTask::success()
|
||
|
+{
|
||
|
+ // close the handle so the destructor won't delete the file
|
||
|
+ if (handle != INVALID_HANDLE_VALUE) {
|
||
|
+ CloseHandle(handle);
|
||
|
+ handle = INVALID_HANDLE_VALUE;
|
||
|
+ }
|
||
|
}
|
||
|
|
||
|
void FileXfer::handle_status(VDAgentFileXferStatusMessage* status)
|
||
|
@@ -218,7 +225,6 @@ void FileXfer::handle_status(VDAgentFileXferStatusMessage* status)
|
||
|
return;
|
||
|
}
|
||
|
task = iter->second;
|
||
|
- task->cancel();
|
||
|
_tasks.erase(iter);
|
||
|
delete task;
|
||
|
}
|
||
|
diff --git a/vdagent/file_xfer.h b/vdagent/file_xfer.h
|
||
|
index 747c29c..41f677a 100644
|
||
|
--- a/vdagent/file_xfer.h
|
||
|
+++ b/vdagent/file_xfer.h
|
||
|
@@ -30,12 +30,14 @@ struct FileXferTask {
|
||
|
lstrcpyn(name, _name, ARRAYSIZE(name));
|
||
|
name[ARRAYSIZE(name)-1] = 0;
|
||
|
}
|
||
|
+ ~FileXferTask();
|
||
|
+
|
||
|
HANDLE handle;
|
||
|
uint64_t size;
|
||
|
uint64_t pos;
|
||
|
TCHAR name[MAX_PATH];
|
||
|
|
||
|
- void cancel();
|
||
|
+ void success();
|
||
|
};
|
||
|
|
||
|
typedef std::map<uint32_t, FileXferTask*> FileXferTasks;
|
||
|
--
|
||
|
2.17.1
|
||
|
|