On Wed, Dec 11, 2013 at 11:38:02AM +0100, Cédric Bosdonnat wrote: > --- > src/network/bridge_driver.c | 90 ++++++++++++++++++++++++++++++++++++ > src/network/bridge_driver_platform.h | 3 ++ > 2 files changed, 93 insertions(+) ACK > +static int > +networkConnectNetworkEventRegisterAny(virConnectPtr conn, > + virNetworkPtr net, > + int eventID, > + virConnectNetworkEventGenericCallback callback, > + void *opaque, > + virFreeCallback freecb) > +{ > + virNetworkDriverStatePtr driver = conn->networkPrivateData; > + int ret = -1; > + > + networkDriverLock(driver); > + > + if (virConnectNetworkEventRegisterAnyEnsureACL(conn) < 0) > + goto cleanup; > + > + if (virNetworkEventStateRegisterID(conn, driver->networkEventState, > + net, eventID, > + VIR_OBJECT_EVENT_CALLBACK(callback), > + opaque, freecb, &ret) < 0) > + ret = -1; > + > + networkDriverUnlock(driver); > + > +cleanup: > + return ret; > +} Opps, locking is wrong - if the ACL check fails we leave the driver locked. We can actually do without locking entirely, since the event state struct is self-locking, so I'll remove the lock/unlock > + > +static int > +networkConnectNetworkEventDeregisterAny(virConnectPtr conn, > + int callbackID) > +{ > + virNetworkDriverStatePtr driver = conn->networkPrivateData; > + int ret = -1; > + > + if (virConnectNetworkEventDeregisterAnyEnsureACL(conn) < 0) > + goto cleanup; > + > + > + networkDriverLock(driver); > + ret = virObjectEventStateDeregisterID(conn, > + driver->networkEventState, > + callbackID); > + networkDriverUnlock(driver); > + > +cleanup: > + return ret; > +} Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :| -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list