[libvirt] [PATCH 1/2] daemon: Rework remoteClientFreeFunc cleanup loops into C macro

Laine Stump laine at laine.org
Mon Mar 27 00:36:52 UTC 2017


On 03/25/2017 08:51 AM, John Ferlan wrote:
> Rather than 'n' repetitive code segments, let's create a single macro
> which will make the code easier to read.
> 
> Signed-off-by: John Ferlan <jferlan at redhat.com>
> ---
>  daemon/remote.c | 120 +++++++++++++++-----------------------------------------
>  1 file changed, 31 insertions(+), 89 deletions(-)
> 
> diff --git a/daemon/remote.c b/daemon/remote.c
> index 1c9708c..6fdafce 100644
> --- a/daemon/remote.c
> +++ b/daemon/remote.c
> @@ -1623,6 +1623,24 @@ void remoteRelayConnectionClosedEvent(virConnectPtr conn ATTRIBUTE_UNUSED, int r
>                                    &msg);
>  }
>  
> +#define CLEAN_EVENT_CALLBACK(conn, eventCallbacks, neventCallbacks, name)   \
> +    do {                                                                    \
> +        size_t i;                                                           \
> +        for (i = 0; i < neventCallbacks; i++) {                             \
> +            int callbackID = eventCallbacks[i]->callbackID;                 \
> +            if (callbackID < 0) {                                           \
> +                VIR_WARN("unexpected incomplete %s callback %zu", name, i); \
> +                continue;                                                   \
> +            }                                                               \
> +            VIR_DEBUG("Deregistering remote %s event relay %d",             \
> +                      name, callbackID);                                    \
> +            eventCallbacks[i]->callbackID = -1;                             \
> +            if (virConnectDomainEventDeregisterAny(conn, callbackID) < 0)   \

This call is different for each loop, and you've made them all
identical. You need to make the deregister function an argument to the
macro.

Otherwise it seems like a nice de-duplication of code. ACK if you fix that.





More information about the libvir-list mailing list