[Spice-devel] [PATCH spice-server] smartcard: Optimise sending data

Pavel Grunt pgrunt at redhat.com
Mon Dec 5 09:29:50 UTC 2016


On Fri, 2016-12-02 at 11:31 -0500, Frediano Ziglio wrote:
> > 
> > As data is packae in a single piece of memory send it
> > altogether.
> > 
> 
> typo: packaged
> 
> > Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
> > ---
> >  server/smartcard-channel-client.c | 5 +----
> >  1 file changed, 1 insertion(+), 4 deletions(-)
> > 
> > diff --git a/server/smartcard-channel-client.c
> > b/server/smartcard-channel-client.c
> > index 35327dc..95be310 100644
> > --- a/server/smartcard-channel-client.c
> > +++ b/server/smartcard-channel-client.c
> > @@ -212,10 +212,7 @@ void
> > smartcard_channel_client_send_data(RedChannelClient
> > *rcc,
> >      spice_assert(rcc);
> >      spice_assert(vheader);
> >      red_channel_client_init_send_data(rcc,
> > SPICE_MSG_SMARTCARD_DATA, item);
> > -    spice_marshaller_add_ref(m, (uint8_t*)vheader,
> > sizeof(VSCMsgHeader));
> > -    if (vheader->length > 0) {
> > -        spice_marshaller_add_ref(m, (uint8_t*)(vheader+1),
> > vheader->length);
> > -    }
> > +    spice_marshaller_add_ref(m, (uint8_t*)vheader,
> > sizeof(VSCMsgHeader) +
> > vheader->length);
> >  }
> >  
> >  void smartcard_channel_client_send_error(RedChannelClient *rcc,
> >  SpiceMarshaller *m, RedPipeItem *item)
> > --
> > 2.9.3
> > 
> > 
> 
> Note that vheader->length is unsigned.
> 
> So original code:
> 
>     spice_marshaller_add_ref(m, (uint8_t*)vheader,
> sizeof(VSCMsgHeader));
>     if (vheader->length > 0) {
>        spice_marshaller_add_ref(m, (uint8_t*)(vheader+1), vheader-
> >length);
>     }
> 
> can be written like
> 
>     if (vheader->length < 0) {
>        // IMPOSSIBLE !!
>     } else if (vheader->length == 0) {
>        spice_marshaller_add_ref(m, (uint8_t*)vheader,
> sizeof(VSCMsgHeader));
>     } else {
>        spice_marshaller_add_ref(m, (uint8_t*)vheader,
> sizeof(VSCMsgHeader));
>        spice_marshaller_add_ref(m, (uint8_t*)(vheader+1), vheader-
> >length);
>     }
> 
> note that vheader has type VSCMsgHeader so 
>   (uint8_t*)(vheader+1) == ((uint8_t*)vheader) +
> sizeof(VSCMsgHeader)
> which lead to
> 
>     if (vheader->length < 0) {
>        // IMPOSSIBLE !!
>     } else if (vheader->length == 0) {
>        spice_marshaller_add_ref(m, (uint8_t*)vheader,
> sizeof(VSCMsgHeader) + vheader->length);
>     } else {
>        spice_marshaller_add_ref(m, (uint8_t*)vheader,
> sizeof(VSCMsgHeader));
>        spice_marshaller_add_ref(m, ((uint8_t*)vheader) +
> sizeof(VSCMsgHeader), vheader->length);
>     }
> 
> that is
> 
>     if (vheader->length < 0) {
>        // IMPOSSIBLE !!
>     } else if (vheader->length == 0) {
>        spice_marshaller_add_ref(m, (uint8_t*)vheader,
> sizeof(VSCMsgHeader) + vheader->length);
>     } else {
>        spice_marshaller_add_ref(m, (uint8_t*)vheader,
> sizeof(VSCMsgHeader) + vheader->length);
>     }
> 
> that's 
> 
>     spice_marshaller_add_ref(m, (uint8_t*)vheader,
> sizeof(VSCMsgHeader) + vheader->length);
> 
> Frediano

Ack,
Pavel



More information about the Spice-devel mailing list