[Spice-devel] [PATCH spice-server] Release cursor as soon as possible

Frediano Ziglio fziglio at redhat.com
Wed Sep 6 16:41:30 UTC 2017


> 
> On Wed, Sep 06, 2017 at 01:41:21PM +0100, Frediano Ziglio wrote:
> > diff --git a/server/red-parse-qxl.c b/server/red-parse-qxl.c
> > index 33f36923a..fda4ff26d 100644
> > --- a/server/red-parse-qxl.c
> > +++ b/server/red-parse-qxl.c
> > @@ -26,6 +26,7 @@
> >  #include "red-common.h"
> >  #include "memslot.h"
> >  #include "red-parse-qxl.h"
> > +#include "red-qxl.h"
> >  
> >  /* Max size in bytes for any data field used in a QXL command.
> >   * This will for example be useful to prevent the guest from saturating
> >   the
> > @@ -1461,8 +1462,10 @@ static void red_put_cursor(SpiceCursor *red)
> >  }
> >  
> >  bool red_get_cursor_cmd(RedMemSlotInfo *slots, int group_id,
> > -                        RedCursorCmd *red, QXLPHYSICAL addr)
> > +                        RedCursorCmd *red, QXLPHYSICAL addr,
> > +                        QXLInstance *qxl_instance)
> >  {
> > +    QXLReleaseInfoExt release_info_ext;
> >      QXLCursorCmd *qxl;
> >      int error;
> >  
> > @@ -1470,8 +1473,8 @@ bool red_get_cursor_cmd(RedMemSlotInfo *slots, int
> > group_id,
> >      if (error) {
> >          return false;
> >      }
> > -    red->release_info_ext.info      = &qxl->release_info;
> > -    red->release_info_ext.group_id  = group_id;
> > +    release_info_ext.info      = &qxl->release_info;
> > +    release_info_ext.group_id  = group_id;
> >  
> >      red->type = qxl->type;
> >      switch (red->type) {
> > @@ -1487,6 +1490,7 @@ bool red_get_cursor_cmd(RedMemSlotInfo *slots, int
> > group_id,
> >          red->u.trail.frequency = qxl->u.trail.frequency;
> >          break;
> >      }
> > +    red_qxl_release_resource(qxl_instance, release_info_ext);
> >      return true;
> >  }
> 
> I would still move this up to the caller:
> 
> diff --git a/server/red-worker.c b/server/red-worker.c
> index 3d27afc47..a06029e3b 100644
> --- a/server/red-worker.c
> +++ b/server/red-worker.c
> @@ -108,6 +108,7 @@ static gboolean red_process_cursor_cmd(RedWorker *worker,
> const QXLCommandExt *e
>          free(cursor_cmd);
>          return FALSE;
>      }
> +    red_qxl_release_resource(worker->qxl, cursor_cmd->release_info_ext);
>      cursor_channel_process_cmd(worker->cursor_channel, cursor_cmd);
>      return TRUE;
>  }
> 
> And I'd still move the "remove CursorChannel::qxl" bits to a separate commit.
> 
> Christophe
> 

I would say dirty but is already dirty so would make sense.
I'll split it.

Frediano


More information about the Spice-devel mailing list