On 05/12/2010 06:10 AM, jdenemar@xxxxxxxxxx wrote: > From: Jiri Denemark <jdenemar@xxxxxxxxxx> > > 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); Ah, nasty. Good catch. ACK -- Chris Lalancette -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list