Well, one day this will be self-locking object, but not today.
But lets prepare the code for that! Moreover,
virNetworkObjListFree() is no longer needed, so turn it into
virNetworkObjListDispose().
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
# n virNetworkFree (returns int)
# n virNetworkFreeName (returns int)
# y virNetworkObjFree
-# n virNetworkObjListFree FIXME
# n virNodeDevCapsDefFree FIXME
# y virNodeDeviceDefFree
# n virNodeDeviceFree (returns int)
VIR_ENUM_IMPL(virNetworkTaint, VIR_NETWORK_TAINT_LAST,
"hook-script");
-bool
-virNetworkObjTaint(virNetworkObjPtr obj,
- virNetworkTaintFlags taint)
+static virClassPtr virNetworkObjListClass;
+static void virNetworkObjListDispose(void *obj);
+
+static int virNetworkObjOnceInit(void)
{
- unsigned int flag = (1 << taint);
+ if (!(virNetworkObjListClass = virClassNew(virClassForObject(),
+ "virNetworkObjList",
+ sizeof(virNetworkObjList),
+ virNetworkObjListDispose)))
+ return -1;
+ return 0;
+}
- if (obj->taint & flag)
- return false;
- obj->taint |= flag;
- return true;
+VIR_ONCE_GLOBAL_INIT(virNetworkObj)
+
+virNetworkObjListPtr virNetworkObjListNew(void)
+{
+ virNetworkObjListPtr nets;
+
+ if (virNetworkObjInitialize() < 0)
+ return NULL;
+
+ if (!(nets = virObjectNew(virNetworkObjListClass)))
+ return NULL;
+
+ return nets;
}
virNetworkObjPtr virNetworkObjFindByUUID(virNetworkObjListPtr nets,
return NULL;
}
+bool
+virNetworkObjTaint(virNetworkObjPtr obj,
+ virNetworkTaintFlags taint)
+{
+ unsigned int flag = (1 << taint);
+
+ if (obj->taint & flag)
+ return false;
+
+ obj->taint |= flag;
+ return true;
+}
+
static void
virPortGroupDefClear(virPortGroupDefPtr def)
VIR_FREE(net);
}
-void virNetworkObjListFree(virNetworkObjListPtr nets)
+static void
+virNetworkObjListDispose(void *obj)
{
+ virNetworkObjListPtr nets = obj;
size_t i;
- if (!nets)
- return;
-
for (i = 0; i < nets->count; i++)
virNetworkObjFree(nets->objs[i]);
VIR_FREE(nets->objs);
- nets->count = 0;
}
/*
# include "device_conf.h"
# include "virbitmap.h"
# include "networkcommon_conf.h"
+# include "virobject.h"
typedef enum {
VIR_NETWORK_FORWARD_NONE = 0,
typedef struct _virNetworkObjList virNetworkObjList;
typedef virNetworkObjList *virNetworkObjListPtr;
struct _virNetworkObjList {
+ virObject parent;
+
size_t count;
virNetworkObjPtr *objs;
};
return net->active;
}
-bool virNetworkObjTaint(virNetworkObjPtr obj,
- virNetworkTaintFlags taint);
+virNetworkObjListPtr virNetworkObjListNew(void);
virNetworkObjPtr virNetworkObjFindByUUID(virNetworkObjListPtr nets,
const unsigned char *uuid);
virNetworkObjPtr virNetworkObjFindByName(virNetworkObjListPtr nets,
const char *name);
-
+bool virNetworkObjTaint(virNetworkObjPtr obj,
+ virNetworkTaintFlags taint);
void virNetworkDefFree(virNetworkDefPtr def);
void virNetworkObjFree(virNetworkObjPtr net);
-void virNetworkObjListFree(virNetworkObjListPtr nets);
-
typedef bool (*virNetworkObjListFilter)(virConnectPtr conn,
virNetworkDefPtr def);
virNetworkObjIsDuplicate;
virNetworkObjListExport;
virNetworkObjListForEach;
-virNetworkObjListFree;
virNetworkObjListGetNames;
+virNetworkObjListNew;
virNetworkObjListNumOfNetworks;
virNetworkObjListPrune;
virNetworkObjLock;
/* if this fails now, it will be retried later with dnsmasqCapsRefresh() */
driver->dnsmasqCaps = dnsmasqCapsNewFromBinary(DNSMASQ);
- if (VIR_ALLOC(driver->networks) < 0)
+ if (!(driver->networks = virNetworkObjListNew()))
goto error;
if (virNetworkLoadAllState(driver->networks,
virObjectEventStateFree(driver->networkEventState);
/* free inactive networks */
- virNetworkObjListFree(driver->networks);
- VIR_FREE(driver->networks);
+ virObjectUnref(driver->networks);
VIR_FREE(driver->networkConfigDir);
VIR_FREE(driver->networkAutostartDir);
if (STRNEQ(conn->driver->name, "Parallels"))
return VIR_DRV_OPEN_DECLINED;
- if (VIR_ALLOC(privconn->networks) < 0)
+ if (!(privconn->networks = virNetworkObjListNew()))
goto error;
if (parallelsLoadNetworks(conn->privateData) < 0)
return VIR_DRV_OPEN_SUCCESS;
error:
- VIR_FREE(privconn->networks);
+ virObjectUnref(privconn->networks);
return VIR_DRV_OPEN_DECLINED;
}
return 0;
parallelsDriverLock(privconn);
- virNetworkObjListFree(privconn->networks);
- VIR_FREE(privconn->networks);
+ virObjectUnref(privconn->networks);
parallelsDriverUnlock(privconn);
return 0;
}
goto error;
if (!(privconn->domains = virDomainObjListNew()) ||
- VIR_ALLOC(privconn->networks) < 0)
+ !(privconn->networks = virNetworkObjListNew()))
goto error;
memmove(&privconn->nodeInfo, &defaultNodeInfo, sizeof(defaultNodeInfo));
error:
virObjectUnref(privconn->domains);
- virNetworkObjListFree(privconn->networks);
- VIR_FREE(privconn->networks);
+ virObjectUnref(privconn->networks);
virInterfaceObjListFree(&privconn->ifaces);
virStoragePoolObjListFree(&privconn->pools);
virNodeDeviceObjListFree(&privconn->devs);
conn->privateData = privconn;
if (!(privconn->domains = virDomainObjListNew()) ||
- VIR_ALLOC(privconn->networks) < 0)
+ !(privconn->networks = virNetworkObjListNew()))
goto error;
if (!(privconn->caps = testBuildCapabilities(conn)))
xmlXPathFreeContext(ctxt);
xmlFreeDoc(doc);
virObjectUnref(privconn->domains);
- virNetworkObjListFree(privconn->networks);
- VIR_FREE(privconn->networks);
+ virObjectUnref(privconn->networks);
virInterfaceObjListFree(&privconn->ifaces);
virStoragePoolObjListFree(&privconn->pools);
VIR_FREE(privconn->path);
virObjectUnref(privconn->xmlopt);
virObjectUnref(privconn->domains);
virNodeDeviceObjListFree(&privconn->devs);
- virNetworkObjListFree(privconn->networks);
- VIR_FREE(privconn->networks);
+ virObjectUnref(privconn->networks);
virInterfaceObjListFree(&privconn->ifaces);
virStoragePoolObjListFree(&privconn->pools);
virObjectEventStateFree(privconn->eventState);