[libvirt] [PATCH v4 5/7] Added network events to the bridged network driver

Daniel P. Berrange berrange at redhat.com
Wed Dec 11 13:29:56 UTC 2013


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 :|




More information about the libvir-list mailing list