[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