[Spice-devel] [PATCH spice-server 1/3] stream: implement interface for manual flush

Christophe Fergeau cfergeau at redhat.com
Thu Apr 12 16:26:09 UTC 2018


Hey, I would just squash this with the next commit.

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,
> -- 
> 2.14.3
> 
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/spice-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/spice-devel/attachments/20180412/898f2bed/attachment.sig>


More information about the Spice-devel mailing list