if (!client->identity)
client->identity = virNetServerClientCreateIdentity(client);
if (client->identity)
- ret = virObjectRef(client->identity);
+ ret = g_object_ref(client->identity);
virObjectUnlock(client);
return ret;
}
virIdentityPtr identity)
{
virObjectLock(client);
- virObjectUnref(client->identity);
+ g_clear_object(&client->identity);
client->identity = identity;
if (client->identity)
- virObjectRef(client->identity);
+ g_object_ref(client->identity);
virObjectUnlock(client);
}
if (client->privateData)
client->privateDataFreeFunc(client->privateData);
- virObjectUnref(client->identity);
+ g_clear_object(&client->identity);
#if WITH_SASL
virObjectUnref(client->sasl);
goto cleanup;
}
- *identity = virObjectRef(client->identity);
+ *identity = g_object_ref(client->identity);
ret = 0;
cleanup:
VIR_LOG_INIT("util.identity");
struct _virIdentity {
- virObject parent;
+ GObject parent;
int nparams;
int maxparams;
virTypedParameterPtr params;
};
-static virClassPtr virIdentityClass;
+G_DEFINE_TYPE(virIdentity, vir_identity, G_TYPE_OBJECT)
+
static virThreadLocal virIdentityCurrent;
-static void virIdentityDispose(void *obj);
+static void virIdentityFinalize(GObject *obj);
-static int virIdentityOnceInit(void)
+static void virIdentityCurrentCleanup(void *ident)
{
- if (!VIR_CLASS_NEW(virIdentity, virClassForObject()))
- return -1;
+ if (ident)
+ g_object_unref(ident);
+}
+static int virIdentityOnceInit(void)
+{
if (virThreadLocalInit(&virIdentityCurrent,
- (virThreadLocalCleanup)virObjectUnref) < 0) {
+ virIdentityCurrentCleanup) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("Cannot initialize thread local for current identity"));
return -1;
VIR_ONCE_GLOBAL_INIT(virIdentity);
+static void vir_identity_init(virIdentity *ident G_GNUC_UNUSED)
+{
+}
+
+static void vir_identity_class_init(virIdentityClass *klass)
+{
+ GObjectClass *obj = G_OBJECT_CLASS(klass);
+
+ obj->finalize = virIdentityFinalize;
+}
+
/**
* virIdentityGetCurrent:
*
* Get the current identity associated with this thread. The
* caller will own a reference to the returned identity, but
* must not modify the object in any way, other than to
- * release the reference when done with virObjectUnref
+ * release the reference when done with g_object_unref
*
* Returns: a reference to the current identity, or NULL
*/
return NULL;
ident = virThreadLocalGet(&virIdentityCurrent);
- return virObjectRef(ident);
+ if (ident)
+ g_object_ref(ident);
+ return ident;
}
old = virThreadLocalGet(&virIdentityCurrent);
if (virThreadLocalSet(&virIdentityCurrent,
- virObjectRef(ident)) < 0) {
+ ident ? g_object_ref(ident) : NULL) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("Unable to set thread local identity"));
- virObjectUnref(ident);
+ if (ident)
+ g_object_unref(ident);
return -1;
}
*/
virIdentityPtr virIdentityNew(void)
{
- virIdentityPtr ident;
-
- if (virIdentityInitialize() < 0)
- return NULL;
-
- if (!(ident = virObjectNew(virIdentityClass)))
- return NULL;
-
- return ident;
+ return VIR_IDENTITY(g_object_new(VIR_TYPE_IDENTITY, NULL));
}
-static void virIdentityDispose(void *object)
+static void virIdentityFinalize(GObject *object)
{
- virIdentityPtr ident = object;
+ virIdentityPtr ident = VIR_IDENTITY(object);
virTypedParamsFree(ident->params, ident->nparams);
+
+ G_OBJECT_CLASS(vir_identity_parent_class)->finalize(object);
}
#pragma once
-#include "virobject.h"
+#include "internal.h"
+#include <glib-object.h>
-typedef struct _virIdentity virIdentity;
-typedef virIdentity *virIdentityPtr;
+#define VIR_TYPE_IDENTITY vir_identity_get_type()
+G_DECLARE_FINAL_TYPE(virIdentity, vir_identity, VIR, IDENTITY, GObject);
-G_DEFINE_AUTOPTR_CLEANUP_FUNC(virIdentity, virObjectUnref);
+typedef virIdentity *virIdentityPtr;
virIdentityPtr virIdentityGetCurrent(void);
int virIdentitySetCurrent(virIdentityPtr ident);