Extend it to a universal helper used for clearing lists of any objects.
Note that the argument type is specifically void * to allow implicit
typecasting.
Additionally add a helper that works on non-NULL terminated arrays once
we know the length.
virNetMessageSaveError(rerr);
virDomainStatsRecordListFree(retStats);
- virDomainListFree(doms);
+ virObjectListFree(doms);
return rv;
}
#undef MATCH
-/**
- * virDomainListFree:
- * @list: list of domains to free
- *
- * Frees a NULL-terminated list of domains without messing with currently
- * set libvirt errors.
- */
-void
-virDomainListFree(virDomainPtr *list)
-{
- virDomainPtr *next;
-
- if (!list)
- return;
-
- for (next = list; *next; next++)
- virObjectUnref(*next);
-
- VIR_FREE(list);
-}
-
-
int
virDomainObjListExport(virDomainObjListPtr doms,
virConnectPtr conn,
ret = data.ndomains;
cleanup:
- virDomainListFree(data.domains);
+ virObjectListFree(data.domains);
virObjectUnlock(doms);
return ret;
}
virDomainObjListFilter filter,
unsigned int flags);
-void virDomainListFree(virDomainPtr *list);
-
int
virDomainDefMaybeAddController(virDomainDefPtr def,
int type,
virDomainLifecycleCrashTypeToString;
virDomainLifecycleTypeFromString;
virDomainLifecycleTypeToString;
-virDomainListFree;
virDomainLiveConfigHelperMethod;
virDomainLoaderDefFree;
virDomainLoaderTypeFromString;
virObjectFreeCallback;
virObjectFreeHashData;
virObjectIsClass;
+virObjectListFree;
+virObjectListFreeCount;
virObjectLock;
virObjectLockableNew;
virObjectNew;
virDomainObjEndAPI(&dom);
virDomainStatsRecordListFree(tmpstats);
- virDomainListFree(domlist);
+ virObjectListFree(domlist);
return ret;
}
{
virObjectUnref(opaque);
}
+
+
+/**
+ * virObjectListFree:
+ * @list: A pointer to a NULL-terminated list of object pointers to free
+ *
+ * Unrefs all members of @list and frees the list itself.
+ */
+void virObjectListFree(void *list)
+{
+ void **next;
+
+ if (!list)
+ return;
+
+ for (next = (void **) list; *next; next++)
+ virObjectUnref(*next);
+
+ VIR_FREE(list);
+}
+
+
+/**
+ * virObjectListFreeCount:
+ * @list: A pointer to a list of object pointers to freea
+ * @count: Number of elements in the list.
+ *
+ * Unrefs all members of @list and frees the list itself.
+ */
+void virObjectListFreeCount(void *list, size_t count)
+{
+ size_t i;
+
+ if (!list)
+ return;
+
+ for (i = 0; i < count; i++)
+ virObjectUnref(((void **)list)[i]);
+
+ VIR_FREE(list);
+}
void virObjectUnlock(void *lockableobj)
ATTRIBUTE_NONNULL(1);
+void virObjectListFree(void *list);
+void virObjectListFreeCount(void *list, size_t count);
#endif /* __VIR_OBJECT_H */
ret = true;
cleanup:
virDomainStatsRecordListFree(records);
- virDomainListFree(domlist);
+ virObjectListFree(domlist);
return ret;
}