summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVictor Toso <victortoso@redhat.com>2016-06-23 16:25:36 +0200
committerVictor Toso <victortoso@redhat.com>2016-07-07 16:19:23 +0200
commitfcdc04dc83eb096997799d970d339c9994dfb86d (patch)
tree79e7583e0f524e5dbe019df6e86f4f82435f41ee
parent202ff31fe4dd9848728b75ad9267718c4cf33444 (diff)
main: to let SpiceFileTransferTask handle errors
* on VD_AGENT_FILE_XFER_STATUS_CAN_SEND_DATA, if the file-transfer is on pending state, spice_file_transfer_task_read_async() will call the callback with error set. * on VD_AGENT_FILE_XFER_STATUS_SUCCESS, if the file-transfer is on pending state, spice_file_transfer_task_completed() will set the error for this task. Acked-by: Jonathon Jongsma <jjongsma@redhat.com>
-rw-r--r--src/channel-main.c17
1 files changed, 8 insertions, 9 deletions
diff --git a/src/channel-main.c b/src/channel-main.c
index 0c61b41..6205db9 100644
--- a/src/channel-main.c
+++ b/src/channel-main.c
@@ -1993,11 +1993,6 @@ static void spice_file_transfer_task_handle_status(SpiceFileTransferTask *task,
switch (msg->result) {
case VD_AGENT_FILE_XFER_STATUS_CAN_SEND_DATA:
- if (task->pending) {
- error = g_error_new(SPICE_CLIENT_ERROR, SPICE_CLIENT_ERROR_FAILED,
- "transfer received CAN_SEND_DATA in pending state");
- break;
- }
spice_file_transfer_task_read_async(task, file_xfer_read_async_cb, NULL);
return;
case VD_AGENT_FILE_XFER_STATUS_CANCELLED:
@@ -2009,9 +2004,6 @@ static void spice_file_transfer_task_handle_status(SpiceFileTransferTask *task,
"some errors occurred in the spice agent");
break;
case VD_AGENT_FILE_XFER_STATUS_SUCCESS:
- if (task->pending)
- error = g_error_new(SPICE_CLIENT_ERROR, SPICE_CLIENT_ERROR_FAILED,
- "transfer received success in pending state");
break;
default:
g_warn_if_reached();
@@ -3000,8 +2992,15 @@ static void spice_file_transfer_task_completed(SpiceFileTransferTask *self,
&msg, sizeof(msg), NULL);
}
- if (self->pending)
+ if (self->pending) {
+ /* Complete but pending is okay only if error is set */
+ if (self->error == NULL) {
+ self->error = g_error_new(SPICE_CLIENT_ERROR,
+ SPICE_CLIENT_ERROR_FAILED,
+ "Cannot complete task in pending state");
+ }
return;
+ }
if (!self->file_stream) {
file_xfer_close_cb(NULL, NULL, self);