util: consolidate on one free callback for hash data

This previous commit introduced a simpler free callback for
hash data with only 1 arg, the value to free:

  commit 49288fac96
  Author: Peter Krempa <pkrempa@redhat.com>
  Date:   Wed Oct 9 15:26:37 2019 +0200

    util: hash: Add possibility to use simpler data free function in virHash

It missed two functions in the hash table code which need
to call the alternate data free function, virHashRemoveEntry
and virHashRemoveSet.

After the previous patch though, there is no code that
makes functional use of the 2nd key arg in the data
free function. There is merely one log message that can
be dropped.

We can thus purge the current virHashDataFree callback
entirely, and rename virHashDataFreeSimple to replace
it.

Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
Daniel P. Berrangé 2019-11-21 19:27:58 +00:00
parent feef23e130
commit bc7e72914a
27 changed files with 43 additions and 76 deletions

View File

@ -1037,14 +1037,14 @@ virDomainPCIAddressSetExtensionAlloc(virDomainPCIAddressSetPtr addrs,
if (VIR_ALLOC(addrs->zpciIds) < 0) if (VIR_ALLOC(addrs->zpciIds) < 0)
return -1; return -1;
if (!(addrs->zpciIds->uids = virHashCreateFull(10, NULL, NULL, if (!(addrs->zpciIds->uids = virHashCreateFull(10, NULL,
virZPCIAddrKeyCode, virZPCIAddrKeyCode,
virZPCIAddrKeyEqual, virZPCIAddrKeyEqual,
virZPCIAddrKeyCopy, virZPCIAddrKeyCopy,
virZPCIAddrKeyFree))) virZPCIAddrKeyFree)))
goto error; goto error;
if (!(addrs->zpciIds->fids = virHashCreateFull(10, NULL, NULL, if (!(addrs->zpciIds->fids = virHashCreateFull(10, NULL,
virZPCIAddrKeyCode, virZPCIAddrKeyCode,
virZPCIAddrKeyEqual, virZPCIAddrKeyEqual,
virZPCIAddrKeyCopy, virZPCIAddrKeyCopy,

View File

@ -619,7 +619,7 @@ virNWFilterVarCombIterGetVarValue(virNWFilterVarCombIterPtr ci,
} }
static void static void
hashDataFree(void *payload, const void *name G_GNUC_UNUSED) hashDataFree(void *payload)
{ {
virNWFilterVarValueFree(payload); virNWFilterVarValueFree(payload);
} }

View File

@ -212,7 +212,7 @@ typedef struct {
* *
* @data Opaque data, struct holding information about the device * @data Opaque data, struct holding information about the device
*/ */
static void virChrdevHashEntryFree(void *data, const void *key G_GNUC_UNUSED) static void virChrdevHashEntryFree(void *data)
{ {
virChrdevHashEntry *ent = data; virChrdevHashEntry *ent = data;
@ -455,6 +455,6 @@ int virChrdevOpen(virChrdevsPtr devs,
VIR_FREE(cbdata->path); VIR_FREE(cbdata->path);
VIR_FREE(cbdata); VIR_FREE(cbdata);
virMutexUnlock(&devs->lock); virMutexUnlock(&devs->lock);
virChrdevHashEntryFree(ent, NULL); virChrdevHashEntryFree(ent);
return -1; return -1;
} }

View File

@ -262,8 +262,7 @@ virDomainMomentAssignDef(virDomainMomentObjListPtr moments,
static void static void
virDomainMomentObjListDataFree(void *payload, virDomainMomentObjListDataFree(void *payload)
const void *name G_GNUC_UNUSED)
{ {
virDomainMomentObjPtr obj = payload; virDomainMomentObjPtr obj = payload;

View File

@ -94,7 +94,7 @@ virNetworkObjLoadAllPorts(virNetworkObjPtr net,
static void static void
virNetworkObjPortFree(void *val, const void *key G_GNUC_UNUSED) virNetworkObjPortFree(void *val)
{ {
virNetworkPortDefFree(val); virNetworkPortDefFree(val);
} }

View File

@ -47,7 +47,7 @@ struct xentoollog_logger_libvirt {
}; };
static void static void
libxlLoggerFileFree(void *payload, const void *key G_GNUC_UNUSED) libxlLoggerFileFree(void *payload)
{ {
FILE *file = payload; FILE *file = payload;
VIR_FORCE_FCLOSE(file); VIR_FORCE_FCLOSE(file);

View File

@ -139,8 +139,7 @@ virLockDaemonUnlock(virLockDaemonPtr lockd)
virMutexUnlock(&lockd->lock); virMutexUnlock(&lockd->lock);
} }
static void virLockDaemonLockSpaceDataFree(void *data, static void virLockDaemonLockSpaceDataFree(void *data)
const void *key G_GNUC_UNUSED)
{ {
virLockSpaceFree(data); virLockSpaceFree(data);
} }

View File

@ -660,7 +660,7 @@ virNWFilterSnoopReqUnlock(virNWFilterSnoopReqPtr req)
* virNWFilterSnoopReqRelease - hash table free function to kill a request * virNWFilterSnoopReqRelease - hash table free function to kill a request
*/ */
static void static void
virNWFilterSnoopReqRelease(void *req0, const void *name G_GNUC_UNUSED) virNWFilterSnoopReqRelease(void *req0)
{ {
virNWFilterSnoopReqPtr req = req0; virNWFilterSnoopReqPtr req = req0;
@ -721,7 +721,7 @@ virNWFilterSnoopReqPut(virNWFilterSnoopReqPtr req)
* - if we still have a valid lease, keep the req for restarts * - if we still have a valid lease, keep the req for restarts
*/ */
if (virHashLookup(virNWFilterSnoopState.snoopReqs, req->ifkey) != req) { if (virHashLookup(virNWFilterSnoopState.snoopReqs, req->ifkey) != req) {
virNWFilterSnoopReqRelease(req, NULL); virNWFilterSnoopReqRelease(req);
} else if (!req->start || req->start->timeout < time(0)) { } else if (!req->start || req->start->timeout < time(0)) {
ignore_value(virHashRemoveEntry(virNWFilterSnoopState.snoopReqs, ignore_value(virHashRemoveEntry(virNWFilterSnoopState.snoopReqs,
req->ifkey)); req->ifkey));

View File

@ -307,7 +307,7 @@ virNWFilterHasLearnReq(int ifindex)
static void static void
freeLearnReqEntry(void *payload, const void *name G_GNUC_UNUSED) freeLearnReqEntry(void *payload)
{ {
virNWFilterIPAddrLearnReqFree(payload); virNWFilterIPAddrLearnReqFree(payload);
} }

View File

@ -93,8 +93,7 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC(qemuBlockNodeNameBackingChainData,
static void static void
qemuBlockNodeNameBackingChainDataHashEntryFree(void *opaque, qemuBlockNodeNameBackingChainDataHashEntryFree(void *opaque)
const void *name G_GNUC_UNUSED)
{ {
qemuBlockNodeNameBackingChainDataFree(opaque); qemuBlockNodeNameBackingChainDataFree(opaque);
} }

View File

@ -1516,7 +1516,7 @@ qemuSharedDeviceEntryDomainExists(qemuSharedDeviceEntryPtr entry,
} }
void void
qemuSharedDeviceEntryFree(void *payload, const void *name G_GNUC_UNUSED) qemuSharedDeviceEntryFree(void *payload)
{ {
qemuSharedDeviceEntryPtr entry = payload; qemuSharedDeviceEntryPtr entry = payload;
size_t i; size_t i;
@ -1566,7 +1566,7 @@ qemuSharedDeviceEntryInsert(virQEMUDriverPtr driver,
return 0; return 0;
error: error:
qemuSharedDeviceEntryFree(entry, NULL); qemuSharedDeviceEntryFree(entry);
return -1; return -1;
} }

View File

@ -338,7 +338,7 @@ bool qemuSharedDeviceEntryDomainExists(qemuSharedDeviceEntryPtr entry,
char *qemuGetSharedDeviceKey(const char *disk_path) char *qemuGetSharedDeviceKey(const char *disk_path)
ATTRIBUTE_NONNULL(1); ATTRIBUTE_NONNULL(1);
void qemuSharedDeviceEntryFree(void *payload, const void *name); void qemuSharedDeviceEntryFree(void *payload);
int qemuAddSharedDisk(virQEMUDriverPtr driver, int qemuAddSharedDisk(virQEMUDriverPtr driver,
virDomainDiskDefPtr disk, virDomainDiskDefPtr disk,

View File

@ -2063,8 +2063,7 @@ qemuDomainSetPrivatePaths(virQEMUDriverPtr driver,
static void static void
dbusVMStateHashFree(void *opaque, dbusVMStateHashFree(void *opaque)
const void *name G_GNUC_UNUSED)
{ {
qemuDBusVMStateFree(opaque); qemuDBusVMStateFree(opaque);
} }

View File

@ -5432,8 +5432,7 @@ qemuMigrationJobFinish(virQEMUDriverPtr driver, virDomainObjPtr vm)
static void static void
qemuMigrationDstErrorFree(void *data, qemuMigrationDstErrorFree(void *data)
const void *name G_GNUC_UNUSED)
{ {
virErrorPtr err = data; virErrorPtr err = data;
virFreeError(err); virFreeError(err);

View File

@ -2109,7 +2109,7 @@ qemuMonitorBlockIOStatusToError(const char *status)
static void static void
qemuDomainDiskInfoFree(void *value, const void *name G_GNUC_UNUSED) qemuDomainDiskInfoFree(void *value)
{ {
struct qemuDomainDiskInfo *info = value; struct qemuDomainDiskInfo *info = value;
@ -2774,8 +2774,7 @@ qemuMonitorQueryRxFilter(qemuMonitorPtr mon, const char *alias,
void void
qemuMonitorChardevInfoFree(void *data, qemuMonitorChardevInfoFree(void *data)
const void *name G_GNUC_UNUSED)
{ {
qemuMonitorChardevInfoPtr info = data; qemuMonitorChardevInfoPtr info = data;

View File

@ -882,7 +882,7 @@ struct _qemuMonitorChardevInfo {
char *ptyPath; char *ptyPath;
virDomainChrDeviceState state; virDomainChrDeviceState state;
}; };
void qemuMonitorChardevInfoFree(void *data, const void *name); void qemuMonitorChardevInfoFree(void *data);
int qemuMonitorGetChardevInfo(qemuMonitorPtr mon, int qemuMonitorGetChardevInfo(qemuMonitorPtr mon,
virHashTablePtr *retinfo); virHashTablePtr *retinfo);

View File

@ -2925,7 +2925,7 @@ qemuMonitorJSONBlockGetNamedNodeData(qemuMonitorPtr mon)
if (!(nodes = qemuMonitorJSONQueryNamedBlockNodes(mon))) if (!(nodes = qemuMonitorJSONQueryNamedBlockNodes(mon)))
return NULL; return NULL;
if (!(ret = virHashNew((virHashDataFreeSimple) qemuMonitorJSONBlockNamedNodeDataFree))) if (!(ret = virHashNew((virHashDataFree) qemuMonitorJSONBlockNamedNodeDataFree)))
return NULL; return NULL;
if (virJSONValueArrayForeachSteal(nodes, if (virJSONValueArrayForeachSteal(nodes,

View File

@ -2583,7 +2583,7 @@ virCgroupKillRecursive(virCgroupPtr group, int signum)
bool backendAvailable = false; bool backendAvailable = false;
virCgroupBackendPtr *backends = virCgroupBackendGetAll(); virCgroupBackendPtr *backends = virCgroupBackendGetAll();
virHashTablePtr pids = virHashCreateFull(100, virHashTablePtr pids = virHashCreateFull(100,
NULL, NULL, NULL,
virCgroupPidCode, virCgroupPidCode,
virCgroupPidEqual, virCgroupPidEqual,
virCgroupPidCopy, virCgroupPidCopy,

View File

@ -56,7 +56,6 @@ struct _virHashTable {
size_t size; size_t size;
size_t nbElems; size_t nbElems;
virHashDataFree dataFree; virHashDataFree dataFree;
virHashDataFreeSimple dataFreeSimple;
virHashKeyCode keyCode; virHashKeyCode keyCode;
virHashKeyEqual keyEqual; virHashKeyEqual keyEqual;
virHashKeyCopy keyCopy; virHashKeyCopy keyCopy;
@ -106,7 +105,7 @@ static void virHashStrFree(void *name)
void void
virHashValueFree(void *value, const void *name G_GNUC_UNUSED) virHashValueFree(void *value)
{ {
VIR_FREE(value); VIR_FREE(value);
} }
@ -134,7 +133,6 @@ virHashComputeKey(const virHashTable *table, const void *name)
*/ */
virHashTablePtr virHashCreateFull(ssize_t size, virHashTablePtr virHashCreateFull(ssize_t size,
virHashDataFree dataFree, virHashDataFree dataFree,
virHashDataFreeSimple dataFreeSimple,
virHashKeyCode keyCode, virHashKeyCode keyCode,
virHashKeyEqual keyEqual, virHashKeyEqual keyEqual,
virHashKeyCopy keyCopy, virHashKeyCopy keyCopy,
@ -151,10 +149,7 @@ virHashTablePtr virHashCreateFull(ssize_t size,
table->seed = virRandomBits(32); table->seed = virRandomBits(32);
table->size = size; table->size = size;
table->nbElems = 0; table->nbElems = 0;
if (dataFree) table->dataFree = dataFree;
table->dataFree = dataFree;
else
table->dataFreeSimple = dataFreeSimple;
table->keyCode = keyCode; table->keyCode = keyCode;
table->keyEqual = keyEqual; table->keyEqual = keyEqual;
table->keyCopy = keyCopy; table->keyCopy = keyCopy;
@ -178,10 +173,9 @@ virHashTablePtr virHashCreateFull(ssize_t size,
* Returns the newly created object, or NULL if an error occurred. * Returns the newly created object, or NULL if an error occurred.
*/ */
virHashTablePtr virHashTablePtr
virHashNew(virHashDataFreeSimple dataFree) virHashNew(virHashDataFree dataFree)
{ {
return virHashCreateFull(32, return virHashCreateFull(32,
NULL,
dataFree, dataFree,
virHashStrCode, virHashStrCode,
virHashStrEqual, virHashStrEqual,
@ -203,7 +197,6 @@ virHashTablePtr virHashCreate(ssize_t size, virHashDataFree dataFree)
{ {
return virHashCreateFull(size, return virHashCreateFull(size,
dataFree, dataFree,
NULL,
virHashStrCode, virHashStrCode,
virHashStrEqual, virHashStrEqual,
virHashStrCopy, virHashStrCopy,
@ -324,9 +317,7 @@ virHashFree(virHashTablePtr table)
virHashEntryPtr next = iter->next; virHashEntryPtr next = iter->next;
if (table->dataFree) if (table->dataFree)
table->dataFree(iter->payload, iter->name); table->dataFree(iter->payload);
if (table->dataFreeSimple)
table->dataFreeSimple(iter->payload);
if (table->keyFree) if (table->keyFree)
table->keyFree(iter->name); table->keyFree(iter->name);
VIR_FREE(iter); VIR_FREE(iter);
@ -358,9 +349,7 @@ virHashAddOrUpdateEntry(virHashTablePtr table, const void *name,
if (table->keyEqual(entry->name, name)) { if (table->keyEqual(entry->name, name)) {
if (is_update) { if (is_update) {
if (table->dataFree) if (table->dataFree)
table->dataFree(entry->payload, entry->name); table->dataFree(entry->payload);
if (table->dataFreeSimple)
table->dataFreeSimple(entry->payload);
entry->payload = userdata; entry->payload = userdata;
return 0; return 0;
} else { } else {
@ -518,12 +507,9 @@ void *virHashSteal(virHashTablePtr table, const void *name)
void *data = virHashLookup(table, name); void *data = virHashLookup(table, name);
if (data) { if (data) {
virHashDataFree dataFree = table->dataFree; virHashDataFree dataFree = table->dataFree;
virHashDataFreeSimple dataFreeSimple = table->dataFreeSimple;
table->dataFree = NULL; table->dataFree = NULL;
table->dataFreeSimple = NULL;
virHashRemoveEntry(table, name); virHashRemoveEntry(table, name);
table->dataFree = dataFree; table->dataFree = dataFree;
table->dataFreeSimple = dataFreeSimple;
} }
return data; return data;
} }
@ -601,7 +587,7 @@ virHashRemoveEntry(virHashTablePtr table, const void *name)
for (entry = *nextptr; entry; entry = entry->next) { for (entry = *nextptr; entry; entry = entry->next) {
if (table->keyEqual(entry->name, name)) { if (table->keyEqual(entry->name, name)) {
if (table->dataFree) if (table->dataFree)
table->dataFree(entry->payload, entry->name); table->dataFree(entry->payload);
if (table->keyFree) if (table->keyFree)
table->keyFree(entry->name); table->keyFree(entry->name);
*nextptr = entry->next; *nextptr = entry->next;
@ -689,7 +675,7 @@ virHashRemoveSet(virHashTablePtr table,
} else { } else {
count++; count++;
if (table->dataFree) if (table->dataFree)
table->dataFree(entry->payload, entry->name); table->dataFree(entry->payload);
if (table->keyFree) if (table->keyFree)
table->keyFree(entry->name); table->keyFree(entry->name);
*nextptr = entry->next; *nextptr = entry->next;

View File

@ -25,19 +25,10 @@ typedef virHashAtomic *virHashAtomicPtr;
/** /**
* virHashDataFree: * virHashDataFree:
* @payload: the data in the hash * @payload: the data in the hash
* @name: the name associated
* *
* Callback to free data from a hash. * Callback to free data from a hash.
*/ */
typedef void (*virHashDataFree) (void *payload, const void *name); typedef void (*virHashDataFree) (void *payload);
/**
* virHashDataFreeSimple:
* @payload: the data in the hash
* @name: the name associated
*
* Callback to free data from a hash.
*/
typedef void (*virHashDataFreeSimple) (void *payload);
/** /**
* virHashIterator: * virHashIterator:
@ -107,14 +98,13 @@ typedef void (*virHashKeyFree)(void *name);
/* /*
* Constructor and destructor. * Constructor and destructor.
*/ */
virHashTablePtr virHashNew(virHashDataFreeSimple dataFree); virHashTablePtr virHashNew(virHashDataFree dataFree);
virHashTablePtr virHashCreate(ssize_t size, virHashTablePtr virHashCreate(ssize_t size,
virHashDataFree dataFree); virHashDataFree dataFree);
virHashAtomicPtr virHashAtomicNew(ssize_t size, virHashAtomicPtr virHashAtomicNew(ssize_t size,
virHashDataFree dataFree); virHashDataFree dataFree);
virHashTablePtr virHashCreateFull(ssize_t size, virHashTablePtr virHashCreateFull(ssize_t size,
virHashDataFree dataFree, virHashDataFree dataFree,
virHashDataFreeSimple dataFreeSimple,
virHashKeyCode keyCode, virHashKeyCode keyCode,
virHashKeyEqual keyEqual, virHashKeyEqual keyEqual,
virHashKeyCopy keyCopy, virHashKeyCopy keyCopy,
@ -203,6 +193,6 @@ void *virHashSearch(const virHashTable *table, virHashSearcher iter,
const void *data, void **name); const void *data, void **name);
/* Convenience for when VIR_FREE(value) is sufficient as a data freer. */ /* Convenience for when VIR_FREE(value) is sufficient as a data freer. */
void virHashValueFree(void *value, const void *name); void virHashValueFree(void *value);
G_DEFINE_AUTOPTR_CLEANUP_FUNC(virHashTable, virHashFree); G_DEFINE_AUTOPTR_CLEANUP_FUNC(virHashTable, virHashFree);

View File

@ -425,8 +425,7 @@ virJSONValueFree(virJSONValuePtr value)
void void
virJSONValueHashFree(void *opaque, virJSONValueHashFree(void *opaque)
const void *name G_GNUC_UNUSED)
{ {
virJSONValueFree(opaque); virJSONValueFree(opaque);
} }

View File

@ -42,7 +42,7 @@ typedef struct _virJSONValue virJSONValue;
typedef virJSONValue *virJSONValuePtr; typedef virJSONValue *virJSONValuePtr;
void virJSONValueFree(virJSONValuePtr value); void virJSONValueFree(virJSONValuePtr value);
void virJSONValueHashFree(void *opaque, const void *name); void virJSONValueHashFree(void *opaque);
virJSONType virJSONValueGetType(const virJSONValue *value); virJSONType virJSONValueGetType(const virJSONValue *value);

View File

@ -265,7 +265,7 @@ static int virKeyFileParse(virKeyFilePtr conf,
} }
static void virKeyFileEntryFree(void *payload, const void *name G_GNUC_UNUSED) static void virKeyFileEntryFree(void *payload)
{ {
virHashFree(payload); virHashFree(payload);
} }

View File

@ -231,7 +231,7 @@ virLockSpaceResourceNew(virLockSpacePtr lockspace,
} }
static void virLockSpaceResourceDataFree(void *opaque, const void *name G_GNUC_UNUSED) static void virLockSpaceResourceDataFree(void *opaque)
{ {
virLockSpaceResourcePtr res = opaque; virLockSpaceResourcePtr res = opaque;
virLockSpaceResourceFree(res); virLockSpaceResourceFree(res);

View File

@ -589,8 +589,7 @@ void virObjectFreeCallback(void *opaque)
* typedef. * typedef.
*/ */
void void
virObjectFreeHashData(void *opaque, virObjectFreeHashData(void *opaque)
const void *name G_GNUC_UNUSED)
{ {
virObjectUnref(opaque); virObjectUnref(opaque);
} }

View File

@ -123,8 +123,7 @@ void
virObjectFreeCallback(void *opaque); virObjectFreeCallback(void *opaque);
void void
virObjectFreeHashData(void *opaque, virObjectFreeHashData(void *opaque);
const void *name);
void * void *
virObjectLockableNew(virClassPtr klass) virObjectLockableNew(virClassPtr klass)

View File

@ -619,12 +619,12 @@ int virSystemdCanHybridSleep(bool *result)
static void static void
virSystemdActivationEntryFree(void *data, const void *name) virSystemdActivationEntryFree(void *data)
{ {
virSystemdActivationEntryPtr ent = data; virSystemdActivationEntryPtr ent = data;
size_t i; size_t i;
VIR_DEBUG("Closing activation FDs for %s", (const char *)name); VIR_DEBUG("Closing activation FDs");
for (i = 0; i < ent->nfds; i++) { for (i = 0; i < ent->nfds; i++) {
VIR_DEBUG("Closing activation FD %d", ent->fds[i]); VIR_DEBUG("Closing activation FD %d", ent->fds[i]);
VIR_FORCE_CLOSE(ent->fds[i]); VIR_FORCE_CLOSE(ent->fds[i]);
@ -647,7 +647,7 @@ virSystemdActivationAddFD(virSystemdActivationPtr act,
return -1; return -1;
if (VIR_ALLOC_N(ent->fds, 1) < 0) { if (VIR_ALLOC_N(ent->fds, 1) < 0) {
virSystemdActivationEntryFree(ent, name); virSystemdActivationEntryFree(ent);
return -1; return -1;
} }
@ -655,7 +655,7 @@ virSystemdActivationAddFD(virSystemdActivationPtr act,
VIR_DEBUG("Record first FD %d with name %s", fd, name); VIR_DEBUG("Record first FD %d with name %s", fd, name);
if (virHashAddEntry(act->fds, name, ent) < 0) { if (virHashAddEntry(act->fds, name, ent) < 0) {
virSystemdActivationEntryFree(ent, name); virSystemdActivationEntryFree(ent);
return -1; return -1;
} }