return;
virObjectUnlock(*net);
+ virObjectUnref(*net);
*net = NULL;
}
return nets;
}
+/**
+ * virNetworkObjFindByUUIDLocked:
+ * @nets: list of network objects
+ * @uuid: network uuid to find
+ *
+ * This functions requires @nets to be locked already!
+ *
+ * Returns: not locked, but ref'd network object.
+ */
virNetworkObjPtr
virNetworkObjFindByUUIDLocked(virNetworkObjListPtr nets,
const unsigned char *uuid)
ret = virHashLookup(nets->objs, uuidstr);
if (ret)
- virObjectLock(ret);
+ virObjectRef(ret);
return ret;
}
+/**
+ * virNetworkObjFindByUUID:
+ * @nets: list of network objects
+ * @uuid: network uuid to find
+ *
+ * This functions locks @nets and find network object which
+ * corresponds to @uuid.
+ *
+ * Returns: locked and ref'd network object.
+ */
virNetworkObjPtr
virNetworkObjFindByUUID(virNetworkObjListPtr nets,
const unsigned char *uuid)
virObjectLock(nets);
ret = virNetworkObjFindByUUIDLocked(nets, uuid);
virObjectUnlock(nets);
+ if (ret)
+ virObjectLock(ret);
return ret;
}
return want;
}
+/*
+ * virNetworkObjFindByNameLocked:
+ * @nets: list of network objects
+ * @name: network name to find
+ *
+ * This functions requires @nets to be locked already!
+ *
+ * Returns: not locked, but ref'd network object.
+ */
virNetworkObjPtr
virNetworkObjFindByNameLocked(virNetworkObjListPtr nets,
const char *name)
ret = virHashSearch(nets->objs, virNetworkObjSearchName, name);
if (ret)
- virObjectLock(ret);
+ virObjectRef(ret);
return ret;
}
+/**
+ * virNetworkObjFindByName:
+ * @nets: list of network objects
+ * @name: network name to find
+ *
+ * This functions locks @nets and find network object which
+ * corresponds to @name.
+ *
+ * Returns: locked and ref'd network object.
+ */
virNetworkObjPtr
virNetworkObjFindByName(virNetworkObjListPtr nets,
const char *name)
virObjectLock(nets);
ret = virNetworkObjFindByNameLocked(nets, name);
virObjectUnlock(nets);
+ if (ret)
+ virObjectLock(ret);
return ret;
}
virObjectLock(nets);
if ((network = virNetworkObjFindByNameLocked(nets, def->name))) {
virObjectUnlock(nets);
+ virObjectLock(network);
virNetworkObjAssignDef(network, def, live);
return network;
}
network->def = def;
network->persistent = !live;
+ virObjectRef(network);
virObjectUnlock(nets);
return network;
error:
virObjectUnlock(nets);
- virObjectUnlock(network);
- virObjectUnref(network);
+ virNetworkObjEndAPI(&network);
return NULL;
}
virObjectLock(nets);
virObjectLock(net);
virHashRemoveEntry(nets->objs, uuidstr);
- virObjectUnlock(net);
virObjectUnlock(nets);
virObjectUnref(net);
}
if (networkStartNetwork(network) < 0) {
virNetworkRemoveInactive(driver->networks,
network);
- network = NULL;
goto cleanup;
}
if (virNetworkSaveConfig(driver->networkConfigDir, def) < 0) {
if (!virNetworkObjIsActive(network)) {
virNetworkRemoveInactive(driver->networks, network);
- network = NULL;
goto cleanup;
}
/* if network was active already, just undo new persistent
VIR_INFO("Undefining network '%s'", network->def->name);
if (!active) {
- if (networkRemoveInactive(network) < 0) {
- network = NULL;
+ if (networkRemoveInactive(network) < 0)
goto cleanup;
- }
- network = NULL;
} else {
/* if the network still exists, it was active, and we need to make
VIR_NETWORK_EVENT_STOPPED,
0);
- if (!network->persistent) {
- if (networkRemoveInactive(network) < 0) {
- network = NULL;
- ret = -1;
- goto cleanup;
- }
- network = NULL;
+ if (!network->persistent &&
+ networkRemoveInactive(network) < 0) {
+ ret = -1;
+ goto cleanup;
}
cleanup:
goto error;
}
netobj->active = 1;
- virObjectUnlock(netobj);
+ virNetworkObjEndAPI(&netobj);
if (!(interfacedef = virInterfaceDefParseString(defaultInterfaceXML)))
goto error;
}
obj->active = 1;
- virObjectUnlock(obj);
+ virNetworkObjEndAPI(&obj);
}
ret = 0;
0);
virNetworkRemoveInactive(privconn->networks, privnet);
- privnet = NULL;
ret = 0;
cleanup:
event = virNetworkEventLifecycleNew(privnet->def->name, privnet->def->uuid,
VIR_NETWORK_EVENT_STOPPED,
0);
- if (!privnet->persistent) {
+ if (!privnet->persistent)
virNetworkRemoveInactive(privconn->networks, privnet);
- privnet = NULL;
- }
+
ret = 0;
cleanup: