[Spice-devel] [spice-gtk v4 07/24] main: to let SpiceFileTransferTask handle errors

Jonathon Jongsma jjongsma at redhat.com
Fri Jun 24 19:17:33 UTC 2016


On Thu, 2016-06-23 at 19:37 +0200, Victor Toso wrote:
> * spice_file_transfer_task_read_async() will call the callback with
>   error in case it is called on pending state

OK, this maintains behavior, since it just moves the error reporting down a
level to the called function.

> 
> * on VD_AGENT_FILE_XFER_STATUS_SUCCESS it should not be possible to be
>   on pending state as spice_file_transfer_task_read_async() would
>   return immediately in case all file is read

On the other hand, this appears to change behavior. If the guest sends an early
STATUS_SUCCESS to the client for some reason (buggy agent thinks it received all
data even though the client is still sending data), we will no longer report an
error. I'm not sure that's a good idea.


> ---
>  src/channel-main.c | 8 --------
>  1 file changed, 8 deletions(-)
> 
> diff --git a/src/channel-main.c b/src/channel-main.c
> index 9787613..4b728fe 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();

Reviewed-by: Jonathon Jongsma <jjongsma at redhat.com>


More information about the Spice-devel mailing list