[PATCH 07/36] virclosecallbacks: Add new close callbacks APIs

Pavel Hrdina phrdina at redhat.com
Fri Jan 6 11:43:02 UTC 2023


On Thu, Jan 05, 2023 at 05:29:56PM +0100, Peter Krempa wrote:
> The new APIs store the list of callbacks for a VM inside the
> virDomainObj and also allow registering multiple callbacks for a single
> domain and also for multiple connections.
> 
> For now this code is dormant until each driver using the old APIs is not
> refactored to use the new APIs.
> 
> Signed-off-by: Peter Krempa <pkrempa at redhat.com>
> ---
>  src/hypervisor/virclosecallbacks.c | 336 +++++++++++++++++++++++++++++
>  src/hypervisor/virclosecallbacks.h |  24 +++
>  src/libvirt_private.syms           |   5 +
>  3 files changed, 365 insertions(+)
> 
> diff --git a/src/hypervisor/virclosecallbacks.c b/src/hypervisor/virclosecallbacks.c
> index a08464438a..21b97cce12 100644
> --- a/src/hypervisor/virclosecallbacks.c
> +++ b/src/hypervisor/virclosecallbacks.c
> @@ -310,3 +310,339 @@ virCloseCallbacksRun(virCloseCallbacks *closeCallbacks,
>      VIR_FREE(list->entries);
>      VIR_FREE(list);
>  }
> +
> +
> +struct _virCloseCallbacksDomainData {
> +    virConnectPtr conn;
> +    virCloseCallback cb;
> +};
> +typedef struct _virCloseCallbacksDomainData virCloseCallbacksDomainData;
> +
> +
> +static void
> +virCloseCallbacksDomainDataFree(virCloseCallbacksDomainData* data)
> +{
> +    g_free(data);
> +}
> +G_DEFINE_AUTOPTR_CLEANUP_FUNC(virCloseCallbacksDomainData, virCloseCallbacksDomainDataFree);
> +
> +
> +virClass *virCloseCallbacksDomainListClass;
> +
> +struct _virCloseCallbacksDomainList {
> +    virObjectLockable parent;
> +
> +    GList *callbacks;
> +};
> +typedef struct _virCloseCallbacksDomainList virCloseCallbacksDomainList;
> +
> +
> +static void
> +virCloseCallbacksDomainListDispose(void *obj G_GNUC_UNUSED)
> +{
> +    virCloseCallbacksDomainList *cc = obj;
> +
> +    g_list_free_full(cc->callbacks, (GDestroyNotify) virCloseCallbacksDomainDataFree);
> +}
> +
> +
> +static int
> +virCloseCallbacksDomainListOnceInit(void)
> +{
> +    if (!(VIR_CLASS_NEW(virCloseCallbacksDomainList, virClassForObjectLockable())))
> +        return -1;
> +
> +    return 0;
> +}
> +
> +VIR_ONCE_GLOBAL_INIT(virCloseCallbacksDomainList);
> +
> +
> +/**
> + * virCloseCallbacksDomainAlloc:
> + *
> + * Allocates and returns a data structure for holding close callback data in
> + * a virDomainObj.
> + */
> +virObject *
> +virCloseCallbacksDomainAlloc(void)
> +{
> +    if (virCloseCallbacksDomainListInitialize() < 0)
> +        abort();
> +
> +    return virObjectNew(virCloseCallbacksDomainListClass);
> +}
> +
> +
> +/**
> + * virCloseCallbacksDomainAdd:
> + * @vm: domain object
> + * @conn: pointer to the connection which should trigger the close callback
> + * @cb: pointer to the callback function
> + *
> + * Registers @cb as a connection close callback for the @conn connection with
> + * the @vm domain. Duplicate registrations are ignored.
> + *
> + * Caller must hold lock on @vm.
> + */
> +void
> +virCloseCallbacksDomainAdd(virDomainObj *vm,
> +                          virConnectPtr conn,
> +                          virCloseCallback cb)

Incorrect indentation.

Reviewed-by: Pavel Hrdina <phrdina at redhat.com>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20230106/b964ed85/attachment.sig>


More information about the libvir-list mailing list