diff --git a/ChangeLog b/ChangeLog index 93a503eddf..0888db5e3a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Thu Jan 15 01:16:05 GMT 2009 John Levon + + * src/xen_unified.c: Fix ref-counting for Xen driver event + registration + Wed Jan 14 17:30:54 GMT 2009 John Levon * docs/devhelp/Makefile.am: Fix devhelp build dependencies diff --git a/src/xen_unified.c b/src/xen_unified.c index a4e8d32cee..1d39c4e4f2 100644 --- a/src/xen_unified.c +++ b/src/xen_unified.c @@ -1359,15 +1359,21 @@ xenUnifiedDomainEventRegister (virConnectPtr conn, void *opaque, void (*freefunc)(void *)) { + int ret; + GET_PRIVATE (conn); if (priv->xsWatch == -1) { xenUnifiedError (conn, VIR_ERR_NO_SUPPORT, __FUNCTION__); return -1; } - conn->refs++; - return virDomainEventCallbackListAdd(conn, priv->domainEventCallbacks, - callback, opaque, freefunc); + ret = virDomainEventCallbackListAdd(conn, priv->domainEventCallbacks, + callback, opaque, freefunc); + + if (ret == 0) + conn->refs++; + + return (ret); } static int @@ -1382,8 +1388,10 @@ xenUnifiedDomainEventDeregister (virConnectPtr conn, } ret = virDomainEventCallbackListRemove(conn, priv->domainEventCallbacks, - callback); - virUnrefConnect(conn); + callback); + + if (ret == 0) + virUnrefConnect(conn); return ret; }