On Thu, Mar 05, 2015 at 12:05:17 +0100, Michal Privoznik wrote:
This is going to be needed later, when some functions needs to avoid
calling multiple times at once. It will work like this:
1) gain the object list mutex
2) find the object to work on
3) do the work
4) release the mutex
As an example of such function is virNetworkAssignDef(). The other
use case might be in virNetworkObjListForEach() callback.
Signed-off-by: Michal Privoznik <mprivozn(a)redhat.com>
---
src/conf/network_conf.c | 45 ++++++++++++++++++++++++++++++++++-----------
src/conf/network_conf.h | 4 ++++
src/libvirt_private.syms | 2 ++
3 files changed, 40 insertions(+), 11 deletions(-)
diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c
index a821f6c..8cf9ffd 100644
--- a/src/conf/network_conf.c
+++ b/src/conf/network_conf.c
@@ -153,34 +153,57 @@ virNetworkObjListPtr virNetworkObjListNew(void)
return nets;
}
+virNetworkObjPtr
+virNetworkObjFindByUUIDLocked(virNetworkObjListPtr nets,
+ const unsigned char *uuid)
+{
+ size_t i;
+
+ for (i = 0; i < nets->count; i++) {
+ virObjectLock(nets->objs[i]);
+ if (!memcmp(nets->objs[i]->def->uuid, uuid, VIR_UUID_BUFLEN))
+ return nets->objs[i];
+ virObjectUnlock(nets->objs[i]);
+ }
+
+ return NULL;
+}
+
virNetworkObjPtr virNetworkObjFindByUUID(virNetworkObjListPtr nets,
const unsigned char *uuid)
{
+ virNetworkObjPtr ret;
+
+ virObjectLock(nets);
+ ret = virNetworkObjFindByUUIDLocked(nets, uuid);
+ virObjectUnlock(nets);
+ return ret;
+}
+
+virNetworkObjPtr
+virNetworkObjFindByNameLocked(virNetworkObjListPtr nets,
+ const char *name)
+{
size_t i;
for (i = 0; i < nets->count; i++) {
virObjectLock(nets->objs[i]);
- if (!memcmp(nets->objs[i]->def->uuid, uuid, VIR_UUID_BUFLEN))
+ if (STREQ(nets->objs[i]->def->name, name))
return nets->objs[i];
virObjectUnlock(nets->objs[i]);
}
return NULL;
}
-
This deletes the whitespace between functions.
virNetworkObjPtr virNetworkObjFindByName(virNetworkObjListPtr nets,
const char *name)a
ACK without damaging the serenity of whitespace :D
Peter