return;
virMutexLock(&devs->lock);
- virHashForEach(devs->hash, virChrdevFreeClearCallbacks, NULL);
+ virHashForEachSafe(devs->hash, virChrdevFreeClearCallbacks, NULL);
virHashFree(devs->hash);
virMutexUnlock(&devs->lock);
virMutexDestroy(&devs->lock);
virHashIterator iter,
void *data)
{
- return virHashForEach(moments->objs, iter, data);
+ return virHashForEachSafe(moments->objs, iter, data);
}
virObjectRWLockWrite(doms);
else
virObjectRWLockRead(doms);
- virHashForEach(doms->objs, virDomainObjListHelper, &data);
+ virHashForEachSafe(doms->objs, virDomainObjListHelper, &data);
virObjectRWUnlock(doms);
return data.ret;
}
struct virNetworkObjListForEachHelperData data = {
.callback = callback, .opaque = opaque, .ret = 0};
virObjectRWLockRead(nets);
- virHashForEach(nets->objs, virNetworkObjListForEachHelper, &data);
+ virHashForEachSafe(nets->objs, virNetworkObjListForEachHelper, &data);
virObjectRWUnlock(nets);
return data.ret;
}
void *opaque)
{
virNetworkObjPortListForEachData data = { iter, opaque, false };
- virHashForEach(obj->ports, virNetworkObjPortForEachCallback, &data);
+ virHashForEachSafe(obj->ports, virNetworkObjPortForEachCallback, &data);
if (data.err)
return -1;
return 0;
callback, opaque, 0,
};
virObjectRWLockRead(bindings);
- virHashForEach(bindings->objs, virNWFilterBindingObjListHelper, &data);
+ virHashForEachSafe(bindings->objs, virNWFilterBindingObjListHelper, &data);
virObjectRWUnlock(bindings);
return data.ret;
}
struct _virStoragePoolObjListForEachData data = { .iter = iter,
.opaque = opaque };
- virHashForEach(pools->objs, virStoragePoolObjListForEachCb, &data);
+ virHashForEachSafe(pools->objs, virStoragePoolObjListForEachCb, &data);
}
.iter = iter, .opaque = opaque };
virObjectRWLockRead(obj->volumes);
- virHashForEach(obj->volumes->objsKey, virStoragePoolObjForEachVolumeCb,
+ virHashForEachSafe(obj->volumes->objsKey, virStoragePoolObjForEachVolumeCb,
&data);
virObjectRWUnlock(obj->volumes);
return 0;
*
* The elements are iterated in arbitrary order.
*
- * virHashForEach, virHashForEachSafe allow the callback to remove the current
+ * virHashForEach prohibits @iter from modifying @table
+ *
+ * virHashForEachSafe allows the callback to remove the current
* element using virHashRemoveEntry but calling other virHash* functions is
* prohibited. Note that removing the entry invalidates @key and @payload in
* the callback.
if (!(hash = testHashInit()))
return -1;
- if (virHashForEach(hash, (virHashIterator) info->data, hash)) {
+ if (virHashForEachSafe(hash, (virHashIterator) info->data, hash)) {
VIR_TEST_VERBOSE("\nvirHashForEach didn't go through all entries");
goto cleanup;
}