diff options
author | Victor Toso <victortoso@redhat.com> | 2016-06-23 16:25:36 +0200 |
---|---|---|
committer | Victor Toso <victortoso@redhat.com> | 2016-07-07 16:19:23 +0200 |
commit | fcdc04dc83eb096997799d970d339c9994dfb86d (patch) | |
tree | 79e7583e0f524e5dbe019df6e86f4f82435f41ee | |
parent | 202ff31fe4dd9848728b75ad9267718c4cf33444 (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.c | 17 |
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); |