Re: [libvirt] Re: [PATCH 07/12] Domain Events - remote driver

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Oct 17, 2008 at 12:02:13PM -0400, Ben Guthro wrote:
> Deliver local callbacks in response to remote events
> 
>  remote_internal.c |  255 ++++++++++++++++++++++++++++++++++++++++++++++++++++--
>  1 file changed, 248 insertions(+), 7 deletions(-)

> diff --git a/src/remote_internal.c b/src/remote_internal.c
> index 35b7b4b..13537f7 100644
> --- a/src/remote_internal.c
> +++ b/src/remote_internal.c
> @@ -34,6 +34,7 @@
> +/** remoteDomainEventFired:
> + *
> + * The callback for monitoring the remote socket
> + * for event data
> + */
> +void remoteDomainEventFired(int fd ATTRIBUTE_UNUSED,
> +                             int event ATTRIBUTE_UNUSED,
> +                             void *opaque)
> +{
> +    char buffer[REMOTE_MESSAGE_MAX];
> +    char buffer2[4];
> +    struct remote_message_header hdr;
> +    XDR xdr;
> +    int len;
> +
> +    virConnectPtr        conn = opaque;
> +    struct private_data *priv = conn->privateData;
> +
> +    DEBUG("%s : Event fired", __FUNCTION__);
> +
> +    /* Read and deserialise length word. */
> +    if (really_read (conn, priv, 0, buffer2, sizeof buffer2) == -1)
> +        return;


Just discovered one tiny problem here - need to check 'event' to see
if the POLLHUP or POLLERR flags are set, and unregister the callback.
Otherwise if you kill the server, the client will just spin on POLLHUP
or ERR  forever. Something like this ought todo the trick

    if (event & (POLLERR | POLLHUP)) {
         virEventRemoveHandle(fd);
         return;
    }

before we try to read any data.

Regards,
Daniel
-- 
|: Red Hat, Engineering, London   -o-   http://people.redhat.com/berrange/ :|
|: http://libvirt.org  -o-  http://virt-manager.org  -o-  http://ovirt.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505  -o-  F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|

--
Libvir-list mailing list
Libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list

[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]