Hi,

On Fri, Aug 12, 2011 at 04:50:28PM +0200, Hans de Goede wrote:
> -    if (c->xmit_buffer_size) {
> -        spice_channel_write(channel, c->xmit_buffer, c->xmit_buffer_size);
> +    if (c->xmit_buffer) {
> +        /*
> +         * Take ownership of the buffer, so that if spice_channel_write calls
> +         * g_io_wait and thus yields to the main context, and that then calls
> +         * spice_channel_buffered_write it does not mess with the buffer
> +         * being written out.
> +         */
> +        guint8 *buffer = c->xmit_buffer;
> +        int size = c->xmit_buffer_size;
> +
> +        c->xmit_buffer = NULL;
>          c->xmit_buffer_size = 0;
> +        c->xmit_buffer_capacity = 0;
> +
> +        spice_channel_write(channel, buffer, size);
> +        g_free(buffer);

I don't know if you're planning to emit a lot of messages per second with
the USB channel, having something like
if (c->xmit_buffer == NULL)
    c->xmit_buffer = buffer;
    c->xmit_buffer_capacity = ...;
    c->xmit_buffer_size = 0;
} else {
    g_free (buffer)
}

would save some allocations later on.

I'm ACKing either version.

Christophe

Attachment: pgp1a2Oa3dLoJ.pgp
Description: PGP signature

_______________________________________________
Spice-devel mailing list
Spice-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/spice-devel

Reply via email to