[Spice-devel] [PATCH spice-server 1/3] stream: implement interface for manual flush
Frediano Ziglio
fziglio at redhat.com
Fri Apr 13 10:25:08 UTC 2018
>
> Hey, I would just squash this with the next commit.
>
I prefer to keep separate, patch 2/3 is just using the interface for
a possible optimization, for instance it does not touch TLS code
mentioned in this commit message
> On Tue, Jan 16, 2018 at 02:18:13PM +0000, Frediano Ziglio wrote:
> > The writing to network was always immediate.
> > Every write in the stream cause a write to the OS.
>
> 'causes'
>
>
> > This can have some penalty if you don't write large data as network
> > packets can be more fragmented or you encrypt data in smaller chunks
> > (when data are encrypted some padding is added then data is split in
> > multiple of encryption block which is usually the size of encryption
> > key and this is done for every write).
> > Define an interface to allow higher levels code to tell low level when
> > data should be sent to remote or when can wait more data.
> >
> > Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
> > ---
> > server/red-stream.c | 9 +++++++++
> > server/red-stream.h | 20 ++++++++++++++++++++
> > 2 files changed, 29 insertions(+)
> >
> > diff --git a/server/red-stream.c b/server/red-stream.c
> > index 8f2c9d32..4812d8e4 100644
> > --- a/server/red-stream.c
> > +++ b/server/red-stream.c
> > @@ -203,6 +203,15 @@ bool red_stream_write_all(RedStream *stream, const
> > void *in_buf, size_t n)
> > return true;
> > }
> >
> > +bool red_stream_set_auto_flush(RedStream *s, bool enable)
> > +{
> > + return enable;
> > +}
> > +
> > +void red_stream_flush(RedStream *s)
> > +{
> > +}
> > +
> > #if HAVE_SASL
> > static ssize_t red_stream_sasl_write(RedStream *s, const void *buf, size_t
> > nbyte);
> > #endif
> > diff --git a/server/red-stream.h b/server/red-stream.h
> > index 4d5075ed..7338c75b 100644
> > --- a/server/red-stream.h
> > +++ b/server/red-stream.h
> > @@ -69,6 +69,26 @@ bool red_stream_set_no_delay(RedStream *stream, bool
> > no_delay);
> > int red_stream_get_no_delay(RedStream *stream);
> > int red_stream_send_msgfd(RedStream *stream, int fd);
> >
> > +/**
> > + * Set auto flush flags.
>
> 'flag'
>
> > + * If set stream will send data to the underlying socket as
>
> 'If set, the stream will ...'
>
> > + * soon as data are written. This is the default.
> > + * If not set you should call red_stream_flush to force
>
> 'If not set, you should ...'
>
> > + * data to be sent. Failing to call red_stream_flush on a
> > + * manual flush stream could lead to latency.
> > + * Disabling auto flush can fail while enabling cannot.
> > + *
> > + * Returns true if success or false on failure.
>
> 'on success' maybe
>
>
> Acked-by: Christophe Fergeau <cfergeau at redhat.com>
>
>
> > + */
> > +bool red_stream_set_auto_flush(RedStream *stream, bool enable);
> > +
> > +/**
> > + * Flush data to the underlying socket.
> > + * Calling this function on a stream with auto flush set has
> > + * no result.
> > + */
> > +void red_stream_flush(RedStream *stream);
> > +
> > typedef enum {
> > RED_SASL_ERROR_OK,
> > RED_SASL_ERROR_GENERIC,
Frediano
More information about the Spice-devel
mailing list