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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

On Fri, Jun 24, 2016 at 02:17:33PM -0500, Jonathon Jongsma wrote:
> 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.

Agreed!

Seems that we can move this down to spice_file_transfer_task_completed()
as this function should be called to complete a task, it seems wrong to
complete a task without error but in a pending state.

<snip>
-    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;
+    }
</snip>

This will require some tests, I guess (to avoid regressions)
  toso

> 
> 
> > ---
> >  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@xxxxxxxxxx>
> _______________________________________________
> Spice-devel mailing list
> Spice-devel@xxxxxxxxxxxxxxxxxxxxx
> https://lists.freedesktop.org/mailman/listinfo/spice-devel
_______________________________________________
Spice-devel mailing list
Spice-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/spice-devel




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]     [Monitors]