[libvirt] [PATCH] Unregister event callback if a fatal error occurs during dispatch

Jiri Denemark jdenemar at redhat.com
Fri Jul 15 11:59:41 UTC 2011


On Fri, Jul 15, 2011 at 11:25:08 +0100, Daniel P. Berrange wrote:
> If we get an I/O error in the async event callback for an RPC
> client, we might not have consumed all pending data off the
> wire. This could result in the callback being immediately
> invoked again. At which point the same I/O might occur. And
> we're invoked again. And again...And again...
> 
> Unregistering the async event callback if an error occurs is
> a good safety net. The real error will be seen when the next
> RPC method is invoked
> 
> * src/rpc/virnetclient.c: Unregister event callback on error
> ---
>  src/rpc/virnetclient.c |    6 ++++--
>  1 files changed, 4 insertions(+), 2 deletions(-)
> 
> diff --git a/src/rpc/virnetclient.c b/src/rpc/virnetclient.c
> index 9fb8fd4..58d4274 100644
> --- a/src/rpc/virnetclient.c
> +++ b/src/rpc/virnetclient.c
> @@ -1124,8 +1124,10 @@ void virNetClientIncomingEvent(virNetSocketPtr sock,
>          goto done;
>      }
>  
> -    if (virNetClientIOHandleInput(client) < 0)
> -        VIR_DEBUG("Something went wrong during async message processing");
> +    if (virNetClientIOHandleInput(client) < 0) {
> +        VIR_WARN("Something went wrong during async message processing");
> +        virNetSocketRemoveIOCallback(sock);
> +    }
>  
>  done:
>      virNetClientUnlock(client);

ACK

Jirka




More information about the libvir-list mailing list