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
pgp1a2Oa3dLoJ.pgp
Description: PGP signature
_______________________________________________ Spice-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/spice-devel
