[Spice-devel] [spice-server v2 5/6] reds-stream: Cache TCP socket 'no-delay' value
Uri Lublin
uril at redhat.com
Sun Mar 12 10:23:51 UTC 2017
On 03/10/2017 03:55 PM, Frediano Ziglio wrote:
>>
>> Rather than calling getsockopt when we need its value, we can cache it
>> as it can only be set through a call to reds_stream_set_no_delay()
>>
>> Signed-off-by: Christophe Fergeau <cfergeau at redhat.com>
>
> I would avoid that
> - not in an hot path, it's just a system call;
> - with my patches this call is not necessary.
>
>> ---
>> server/reds-stream.c | 16 ++++++++++++++--
>> 1 file changed, 14 insertions(+), 2 deletions(-)
>>
>> diff --git a/server/reds-stream.c b/server/reds-stream.c
>> index 1d815c1..66b1166 100644
>> --- a/server/reds-stream.c
>> +++ b/server/reds-stream.c
>> @@ -99,6 +99,7 @@ struct RedsStreamPrivate {
>> ssize_t (*writev)(RedsStream *s, const struct iovec *iov, int iovcnt);
>>
>> RedsState *reds;
>> + bool no_delay;
>> };
>>
>> static ssize_t stream_write_cb(RedsStream *s, const void *buf, size_t size)
>> @@ -263,12 +264,17 @@ bool reds_stream_is_plain_unix(const RedsStream *s)
>>
>> bool reds_stream_set_no_delay(RedsStream *stream, bool no_delay)
>> {
>> - return red_socket_set_no_delay(stream->socket, no_delay);
>> + bool success;
>> + success = red_socket_set_no_delay(stream->socket, no_delay);
>> + if (success) {
>> + stream->priv->no_delay = !!no_delay;
>> + }
>> + return success;
>> }
>>
>> int reds_stream_get_no_delay(RedsStream *stream)
>> {
>> - return red_socket_get_no_delay(stream->socket);
>> + return stream->priv->no_delay;
>> }
>>
>> int reds_stream_send_msgfd(RedsStream *stream, int fd)
>> @@ -372,7 +378,13 @@ void reds_stream_push_channel_event(RedsStream *s, int
>> event)
>>
>> static void reds_stream_set_socket(RedsStream *stream, int socket)
>> {
>> + int no_delay;
>> stream->socket = socket;
>> + no_delay = red_socket_get_no_delay(socket);
>> + if (no_delay != -1) {
>> + stream->priv->no_delay = !!no_delay;
>> + }
Also, if red_socket_get_no_delay(socket) fails here
future calls to reds_stream_get_no_delay may return a value
(false?) and not fail (in case reds_stream_set_no_delay was
not called).
Uri
>> +
>> /* deprecated fields. Filling them for backward compatibility */
>> stream->priv->info->llen = sizeof(stream->priv->info->laddr);
>> stream->priv->info->plen = sizeof(stream->priv->info->paddr);
>
> Frediano
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/spice-devel
>
More information about the Spice-devel
mailing list