[libvirt] [PATCH v2 7/9] admin: Add support for connection close callbacks
John Ferlan
jferlan at redhat.com
Wed Nov 4 23:11:35 UTC 2015
On 10/16/2015 02:12 PM, Erik Skultety wrote:
> As we need a client disconnect handler, we also need a mechanism to register
> such handlers for a client. This patch introduced both the close callbacks and
> also the client vshAdmCatchDisconnect handler to be registered with it. By
> registering the handler we still need to make sure the client can react to
> daemon's events like disconnect or keepalive, so asynchronous I/O event polling
> is necessary to be enabled too.
> ---
> include/libvirt/libvirt-admin.h | 19 +++++++
> src/admin/admin_remote.c | 36 +++++++++++++
> src/datatypes.c | 20 +++++++
> src/datatypes.h | 14 ++++-
> src/libvirt-admin.c | 112 ++++++++++++++++++++++++++++++++++++++++
> src/libvirt_admin_public.syms | 2 +
> tools/virt-admin.c | 50 ++++++++++++++++++
> 7 files changed, 252 insertions(+), 1 deletion(-)
>
Ran the series through the Coverity checks...
[...]
> diff --git a/src/datatypes.c b/src/datatypes.c
> index aeac301..603b168 100644
> --- a/src/datatypes.c
> +++ b/src/datatypes.c
> @@ -60,8 +60,10 @@ static void virStorageVolDispose(void *obj);
> static void virStoragePoolDispose(void *obj);
>
> virClassPtr virAdmConnectClass;
> +virClassPtr virAdmConnectCloseCallbackDataClass;
>
> static void virAdmConnectDispose(void *obj);
> +static void virAdmConnectCloseCallbackDataDispose(void *obj);
>
> static int
> virDataTypesOnceInit(void)
> @@ -91,6 +93,7 @@ virDataTypesOnceInit(void)
> DECLARE_CLASS(virStoragePool);
>
> DECLARE_CLASS_LOCKABLE(virAdmConnect);
> + DECLARE_CLASS_LOCKABLE(virAdmConnectCloseCallbackData);
>
> #undef DECLARE_CLASS_COMMON
> #undef DECLARE_CLASS_LOCKABLE
> @@ -822,6 +825,9 @@ virAdmConnectNew(void)
> if (!(ret = virObjectLockableNew(virAdmConnectClass)))
> return NULL;
>
> + if (!(ret->closeCallback = virObjectLockableNew(virAdmConnectCloseCallbackDataClass)))
> + return NULL;
> +
You'll need to free ret or have some sort of cleanup here.
John
> return ret;
> }
>
> @@ -834,4 +840,18 @@ virAdmConnectDispose(void *obj)
> conn->privateDataFreeFunc(conn);
>
> virURIFree(conn->uri);
> + virObjectUnref(conn->closeCallback);
> +}
> +
> +static void
> +virAdmConnectCloseCallbackDataDispose(void *obj)
> +{
> + virAdmConnectCloseCallbackDataPtr cb_data = obj;
> +
> + virObjectLock(cb_data);
> +
> + if (cb_data->freeCallback)
> + cb_data->freeCallback(cb_data->opaque);
> +
> + virObjectUnlock(cb_data);
> }
[...]
More information about the libvir-list
mailing list