On 10/20/2015 08:46 AM, Markus Armbruster wrote:
> Gerd Hoffmann <kra...@redhat.com> writes:
> 
>>   Hi,
>>
>>>> -static VncBasicInfo *vnc_basic_info_get(struct sockaddr_storage *sa,
>>>> -                                        socklen_t salen)
>>>> +static void vnc_basic_info_get(struct sockaddr_storage *sa,
>>>> +                               socklen_t salen,
>>>> +                               VncBasicInfo *info,
>>>> +                               Error **errp)
>>
>>> The function no longer "gets info", it merely initializes it.  Rename it
>>> accordingly?  Gerd?
>>
>> vnc_fill_basic_info maybe?
> 
> Fine with me.  Could also call it _init_ instead of _fill_.

I like init a bit better than fill.

> 
>>> Outside this patch's scope, but since I'm looking at the code already...

I'm guessing that also means that fixing it is outside this series' scope.

>>> When vnc_server_info_get() fails, the event is dropped.  Why is that
>>> okay?  Failure seems unlikely, though.
>>
>> Suggestions what else to do?  I don't wanna crash qemu by calling
>> qapi_event_send_vnc_* with a NULL pointer.  And, yes, it should be
>> highly unlikely so trying some more sophisticated error handling would
>> probably be dead code ...
> 
> These events signal a state change.  Dropping them make me feel uneasy,
> because if a client uses them to track state, it gets out of sync.

Events are already best-effort; clients have to be prepared to miss an
event - but that's mainly when reconnecting (such as across libvirtd
restarts), and not while the monitor is reliably connected.

> The events need to identify the server to be of any use for state
> tracking.  Currently, this is members host, service, family of data
> member server.
> 
> We could avoid failures in vnc_qmp_event() as follows:
> 
> 1. When we create a server, we obtain its info with getsockname() and
>    getnameinfo().  If they fail, we fail server creation.  Else, we
>    store the info for vnc_qmp_event().
> 
> 2. When a client connects, we obtain its info with getpeername() and
>    getnameinfo().  If they fail, we refuse the connection.  Else, we
>    store the infor for vnc_qmp_event().

Seems reasonable to me, but starts to be out of scope for what I'm
currently tackling, so is this something I can hand to you, Gerd?

> 
> Alternatively, we can embrace the failures and send the events without
> the information we failed to get.  Requires another way to identify the
> server.  VncDisplay's id, perhaps?  Might be nice to have anyway.

Yes, including the id as a new field to the event sounds like a
reasonable addition, whether or not my next patch reworking things to
drop info->base makes it impossible to pass qmp_event_send_vnc_* a NULL
pointer, even if we couldn't resolve useful information to display.

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to