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

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



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 :|


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