[PATCH 14/36] admin: convert virAdmClient to GObject
Jonathon Jongsma
jjongsma at redhat.com
Wed Apr 8 20:49:11 UTC 2020
On Fri, 2020-04-03 at 17:15 +0200, Rafael Fonseca wrote:
> Signed-off-by: Rafael Fonseca <r4f4rfs at gmail.com>
> ---
> src/admin/libvirt-admin.c | 2 +-
> src/admin/libvirt_admin_private.syms | 1 -
> src/datatypes.c | 36 ++++++++++++++++++------
> ----
> src/datatypes.h | 13 +++++-----
> 4 files changed, 31 insertions(+), 21 deletions(-)
>
> diff --git a/src/admin/libvirt-admin.c b/src/admin/libvirt-admin.c
> index ed7a57cbbb..6f86de4360 100644
> --- a/src/admin/libvirt-admin.c
> +++ b/src/admin/libvirt-admin.c
> @@ -676,7 +676,7 @@ int virAdmClientFree(virAdmClientPtr client)
>
> virCheckAdmClientReturn(client, -1);
>
> - virObjectUnref(client);
> + g_object_unref(client);
> return 0;
> }
>
> diff --git a/src/admin/libvirt_admin_private.syms
> b/src/admin/libvirt_admin_private.syms
> index 270fa43995..9ba4b68932 100644
> --- a/src/admin/libvirt_admin_private.syms
> +++ b/src/admin/libvirt_admin_private.syms
> @@ -34,7 +34,6 @@ xdr_admin_server_set_threadpool_parameters_args;
> xdr_admin_server_update_tls_files_args;
>
> # datatypes.h
> -virAdmClientClass;
> virAdmConnectClass;
> virAdmConnectCloseCallbackDataRegister;
> virAdmConnectCloseCallbackDataReset;
> diff --git a/src/datatypes.c b/src/datatypes.c
> index d6afaf89ad..68fc216ffa 100644
> --- a/src/datatypes.c
> +++ b/src/datatypes.c
> @@ -71,8 +71,21 @@ virClassPtr virAdmConnectCloseCallbackDataClass;
> static void virAdmConnectDispose(void *obj);
> static void virAdmConnectCloseCallbackDataDispose(void *obj);
>
> -virClassPtr virAdmClientClass;
> -static void virAdmClientDispose(void *obj);
> +G_DEFINE_TYPE(virAdmClient, vir_adm_client, G_TYPE_OBJECT);
> +static void virAdmClientFinalize(GObject *obj);
> +
> +static void
> +vir_adm_client_init(virAdmClient *clt G_GNUC_UNUSED)
> +{
> +}
> +
> +static void
> +vir_adm_client_class_init(virAdmClientClass *klass)
> +{
> + GObjectClass *obj = G_OBJECT_CLASS(klass);
> +
> + obj->finalize = virAdmClientFinalize;
> +}
>
> G_DEFINE_TYPE(virAdmServer, vir_adm_server, G_TYPE_OBJECT);
> static void virAdmServerFinalize(GObject *obj);
> @@ -119,7 +132,6 @@ virDataTypesOnceInit(void)
>
> DECLARE_CLASS_LOCKABLE(virAdmConnect);
> DECLARE_CLASS_LOCKABLE(virAdmConnectCloseCallbackData);
> - DECLARE_CLASS(virAdmClient);
>
> #undef DECLARE_CLASS_COMMON
> #undef DECLARE_CLASS_LOCKABLE
> @@ -1216,30 +1228,28 @@ virAdmClientPtr
> virAdmGetClient(virAdmServerPtr srv, const unsigned long long id,
> unsigned long long timestamp, unsigned int
> transport)
> {
> - virAdmClientPtr ret = NULL;
> + g_autoptr(virAdmClient) ret = NULL;
>
> if (virDataTypesInitialize() < 0)
> - goto error;
> + return NULL;
>
> - if (!(ret = virObjectNew(virAdmClientClass)))
> - goto error;
> + ret = VIR_ADM_CLIENT(g_object_new(VIR_TYPE_ADM_CLIENT, NULL));
>
> ret->id = id;
> ret->timestamp = timestamp;
> ret->transport = transport;
> ret->srv = g_object_ref(srv);
>
> - return ret;
> - error:
> - virObjectUnref(ret);
> - return NULL;
> + return g_steal_pointer(&ret);
> }
>
> static void
> -virAdmClientDispose(void *obj)
> +virAdmClientFinalize(GObject *obj)
> {
> - virAdmClientPtr clt = obj;
> + virAdmClientPtr clt = VIR_ADM_CLIENT(obj);
> VIR_DEBUG("release client clt=%p, id=%llu", clt, clt->id);
>
> g_object_unref(clt->srv);
> +
> + G_OBJECT_CLASS(vir_adm_client_parent_class)->finalize(obj);
> }
> diff --git a/src/datatypes.h b/src/datatypes.h
> index 20b64ca788..4e9f338f8b 100644
> --- a/src/datatypes.h
> +++ b/src/datatypes.h
> @@ -46,10 +46,11 @@ extern virClassPtr virStorageVolClass;
> extern virClassPtr virStoragePoolClass;
>
> extern virClassPtr virAdmConnectClass;
> -extern virClassPtr virAdmClientClass;
>
> #define VIR_TYPE_ADM_SERVER vir_adm_server_get_type()
> G_DECLARE_FINAL_TYPE(virAdmServer, vir_adm_server, VIR, ADM_SERVER,
> GObject);
> +#define VIR_TYPE_ADM_CLIENT vir_adm_client_get_type()
> +G_DECLARE_FINAL_TYPE(virAdmClient, vir_adm_client, VIR, ADM_CLIENT,
> GObject);
>
> #define virCheckConnectReturn(obj, retval) \
> do { \
> @@ -447,8 +448,8 @@ G_DECLARE_FINAL_TYPE(virAdmServer,
> vir_adm_server, VIR, ADM_SERVER, GObject);
>
> #define virCheckAdmClientReturn(obj, retval) \
> do { \
> - virAdmClientPtr _clt = (obj); \
> - if (!virObjectIsClass(_clt, virAdmClientClass) || \
> + virAdmClientPtr _clt = VIR_ADM_CLIENT(obj); \
> + if (!G_IS_OBJECT(_clt) || !(G_OBJECT_TYPE(_clt) ==
> VIR_TYPE_ADM_CLIENT) || \
Same comments here about the casting macro as in the previous patch.
> !G_IS_OBJECT(_clt->srv) || !(G_OBJECT_TYPE(_clt->srv) ==
> VIR_TYPE_ADM_SERVER) || \
> !virObjectIsClass(_clt->srv->conn, virAdmConnectClass))
> { \
> virReportErrorHelper(VIR_FROM_THIS,
> VIR_ERR_INVALID_CONN, \
> @@ -460,8 +461,8 @@ G_DECLARE_FINAL_TYPE(virAdmServer,
> vir_adm_server, VIR, ADM_SERVER, GObject);
> } while (0)
> #define virCheckAdmClientGoto(obj, label) \
> do { \
> - virAdmClientPtr _clt = (obj); \
> - if (!virObjectIsClass(_clt, virAdmClientClass) || \
> + virAdmClientPtr _clt = VIR_ADM_CLIENT(obj); \
> + if (!G_IS_OBJECT(_clt) || !(G_OBJECT_TYPE(_clt) ==
> VIR_TYPE_ADM_CLIENT) || \
> !G_IS_OBJECT(_clt->srv) || !(G_OBJECT_TYPE(_clt->srv) ==
> VIR_TYPE_ADM_SERVER) || \
> !virObjectIsClass(_clt->srv->conn, virAdmConnectClass))
> { \
> virReportErrorHelper(VIR_FROM_THIS,
> VIR_ERR_INVALID_CONN, \
> @@ -588,7 +589,7 @@ struct _virAdmServer {
> * Internal structure associated to a client connected to daemon
> */
> struct _virAdmClient {
> - virObject parent;
> + GObject parent;
> virAdmServerPtr srv; /* pointer to the server client
> is
> * connected to, which also
> holds a
> * reference back to the admin
> connection
More information about the libvir-list
mailing list