[libvirt] [PATCH 1/2] Remove watches before calling REMOTE_PROC_CLOSE

Daniel P. Berrange berrange at redhat.com
Wed May 12 13:38:40 UTC 2010


On Wed, May 12, 2010 at 12:10:18PM +0200, jdenemar at redhat.com wrote:
> From: Jiri Denemark <jdenemar at redhat.com>
> 
> First calling REMOTE_PROC_CLOSE and then removing watches might lead to
> a hang as HANGUP event can be triggered before the watches are actually
> removed but after virConnectPtr is already freed. As a result of that
> remoteDomainEventFired() would try to lock uninitialized mutex, which
> would hang for ever.
> ---
>  src/remote/remote_driver.c |   10 +++++-----
>  1 files changed, 5 insertions(+), 5 deletions(-)
> 
> diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c
> index e4a68ad..990bfce 100644
> --- a/src/remote/remote_driver.c
> +++ b/src/remote/remote_driver.c
> @@ -1418,11 +1418,6 @@ verify_certificate (virConnectPtr conn ATTRIBUTE_UNUSED,
>  static int
>  doRemoteClose (virConnectPtr conn, struct private_data *priv)
>  {
> -    if (call (conn, priv, 0, REMOTE_PROC_CLOSE,
> -              (xdrproc_t) xdr_void, (char *) NULL,
> -              (xdrproc_t) xdr_void, (char *) NULL) == -1)
> -        return -1;
> -
>      if (priv->eventFlushTimer >= 0) {
>          /* Remove timeout */
>          virEventRemoveTimeout(priv->eventFlushTimer);
> @@ -1431,6 +1426,11 @@ doRemoteClose (virConnectPtr conn, struct private_data *priv)
>          priv->watch = -1;
>      }
>  
> +    if (call (conn, priv, 0, REMOTE_PROC_CLOSE,
> +              (xdrproc_t) xdr_void, (char *) NULL,
> +              (xdrproc_t) xdr_void, (char *) NULL) == -1)
> +        return -1;
> +
>      /* Close socket. */
>      if (priv->uses_tls && priv->session) {
>          gnutls_bye (priv->session, GNUTLS_SHUT_RDWR);

ACK, this will prevent us seeing the HANGUP condition.


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




More information about the libvir-list mailing list