};
struct _virInterfaceObjList {
+ virObjectRWLockable parent;
+
size_t count;
virInterfaceObjPtr *objs;
};
/* virInterfaceObj manipulation */
static virClassPtr virInterfaceObjClass;
+static virClassPtr virInterfaceObjListClass;
static void virInterfaceObjDispose(void *obj);
+static void virInterfaceObjListDispose(void *obj);
static int
virInterfaceObjOnceInit(void)
virInterfaceObjDispose)))
return -1;
+ if (!(virInterfaceObjListClass = virClassNew(virClassForObjectRWLockable(),
+ "virInterfaceObjList",
+ sizeof(virInterfaceObjList),
+ virInterfaceObjListDispose)))
+ return -1;
+
return 0;
}
{
virInterfaceObjListPtr interfaces;
- if (VIR_ALLOC(interfaces) < 0)
+ if (virInterfaceObjInitialize() < 0)
+ return NULL;
+
+ if (!(interfaces = virObjectRWLockableNew(virInterfaceObjListClass)))
return NULL;
+
return interfaces;
}
size_t i;
int matchct = 0;
+ virObjectRWLockRead(interfaces);
for (i = 0; i < interfaces->count; i++) {
virInterfaceObjPtr obj = interfaces->objs[i];
virInterfaceDefPtr def;
}
virObjectUnlock(obj);
}
+ virObjectRWUnlock(interfaces);
return matchct;
error:
while (--matchct >= 0)
VIR_FREE(matches[matchct]);
+ virObjectRWUnlock(interfaces);
return -1;
}
{
size_t i;
+ virObjectRWLockRead(interfaces);
for (i = 0; i < interfaces->count; i++) {
virInterfaceObjPtr obj = interfaces->objs[i];
virInterfaceDefPtr def;
virObjectLock(obj);
def = obj->def;
- if (STREQ(def->name, name))
+ if (STREQ(def->name, name)) {
+ virObjectRWUnlock(interfaces);
return virObjectRef(obj);
+ }
virObjectUnlock(obj);
}
+ virObjectRWUnlock(interfaces);
return NULL;
}
void
-virInterfaceObjListFree(virInterfaceObjListPtr interfaces)
+virInterfaceObjListDispose(void *obj)
{
size_t i;
+ virInterfaceObjListPtr interfaces = obj;
for (i = 0; i < interfaces->count; i++)
virObjectUnref(interfaces->objs[i]);
VIR_FREE(interfaces->objs);
- VIR_FREE(interfaces);
}
if (!(dest = virInterfaceObjListNew()))
return NULL;
+ virObjectRWLockRead(interfaces);
cnt = interfaces->count;
for (i = 0; i < cnt; i++) {
virInterfaceObjPtr srcobj = interfaces->objs[i];
goto error;
virInterfaceObjEndAPI(&obj);
}
+ virObjectRWUnlock(interfaces);
return dest;
error:
- virInterfaceObjListFree(dest);
+ virObjectUnref(dest);
+ virObjectRWUnlock(interfaces);
return NULL;
}
if (!(obj = virInterfaceObjNew()))
return NULL;
+ virObjectRWLockWrite(interfaces);
if (VIR_APPEND_ELEMENT_COPY(interfaces->objs,
interfaces->count, obj) < 0) {
virInterfaceObjEndAPI(&obj);
+ virObjectRWUnlock(interfaces);
return NULL;
}
obj->def = def;
+ virObjectRWUnlock(interfaces);
return virObjectRef(obj);
}
size_t i;
virObjectUnlock(obj);
+ virObjectRWLockWrite(interfaces);
for (i = 0; i < interfaces->count; i++) {
virObjectLock(interfaces->objs[i]);
if (interfaces->objs[i] == obj) {
}
virObjectUnlock(interfaces->objs[i]);
}
+ virObjectRWUnlock(interfaces);
}
size_t i;
int ninterfaces = 0;
+ virObjectRWLockRead(interfaces);
for (i = 0; (i < interfaces->count); i++) {
virInterfaceObjPtr obj = interfaces->objs[i];
virObjectLock(obj);
ninterfaces++;
virObjectUnlock(obj);
}
+ virObjectRWUnlock(interfaces);
return ninterfaces;
}
int nnames = 0;
size_t i;
+ virObjectRWLockRead(interfaces);
for (i = 0; i < interfaces->count && nnames < maxnames; i++) {
virInterfaceObjPtr obj = interfaces->objs[i];
virInterfaceDefPtr def;
}
virObjectUnlock(obj);
}
+ virObjectRWUnlock(interfaces);
return nnames;
virObjectUnref(driver->domains);
virNodeDeviceObjListFree(driver->devs);
virObjectUnref(driver->networks);
- virInterfaceObjListFree(driver->ifaces);
+ virObjectUnref(driver->ifaces);
virStoragePoolObjListFree(&driver->pools);
virObjectUnref(driver->eventState);
virMutexUnlock(&driver->lock);
goto cleanup;
}
- virInterfaceObjListFree(privconn->backupIfaces);
+ virObjectUnref(privconn->backupIfaces);
privconn->transaction_running = false;
ret = 0;
goto cleanup;
}
- virInterfaceObjListFree(privconn->ifaces);
+ virObjectUnref(privconn->ifaces);
privconn->ifaces = privconn->backupIfaces;
privconn->backupIfaces = NULL;