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)
return -1;
if (!(addrs->zpciIds->uids = virHashCreateFull(10, NULL, NULL,
if (!(addrs->zpciIds->uids = virHashCreateFull(10, NULL,
virZPCIAddrKeyCode,
virZPCIAddrKeyEqual,
virZPCIAddrKeyCopy,
virZPCIAddrKeyFree)))
goto error;
if (!(addrs->zpciIds->fids = virHashCreateFull(10, NULL, NULL,
if (!(addrs->zpciIds->fids = virHashCreateFull(10, NULL,
virZPCIAddrKeyCode,
virZPCIAddrKeyEqual,
virZPCIAddrKeyCopy,

View File

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

View File

@ -212,7 +212,7 @@ typedef struct {
*
* @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;
@ -455,6 +455,6 @@ int virChrdevOpen(virChrdevsPtr devs,
VIR_FREE(cbdata->path);
VIR_FREE(cbdata);
virMutexUnlock(&devs->lock);
virChrdevHashEntryFree(ent, NULL);
virChrdevHashEntryFree(ent);
return -1;
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -25,19 +25,10 @@ typedef virHashAtomic *virHashAtomicPtr;
/**
* virHashDataFree:
* @payload: the data in the hash
* @name: the name associated
*
* Callback to free data from a hash.
*/
typedef void (*virHashDataFree) (void *payload, const void *name);
/**
* virHashDataFreeSimple:
* @payload: the data in the hash
* @name: the name associated
*
* Callback to free data from a hash.
*/
typedef void (*virHashDataFreeSimple) (void *payload);
typedef void (*virHashDataFree) (void *payload);
/**
* virHashIterator:
@ -107,14 +98,13 @@ typedef void (*virHashKeyFree)(void *name);
/*
* Constructor and destructor.
*/
virHashTablePtr virHashNew(virHashDataFreeSimple dataFree);
virHashTablePtr virHashNew(virHashDataFree dataFree);
virHashTablePtr virHashCreate(ssize_t size,
virHashDataFree dataFree);
virHashAtomicPtr virHashAtomicNew(ssize_t size,
virHashDataFree dataFree);
virHashTablePtr virHashCreateFull(ssize_t size,
virHashDataFree dataFree,
virHashDataFreeSimple dataFreeSimple,
virHashKeyCode keyCode,
virHashKeyEqual keyEqual,
virHashKeyCopy keyCopy,
@ -203,6 +193,6 @@ void *virHashSearch(const virHashTable *table, virHashSearcher iter,
const void *data, void **name);
/* 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);

View File

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

View File

@ -42,7 +42,7 @@ typedef struct _virJSONValue virJSONValue;
typedef virJSONValue *virJSONValuePtr;
void virJSONValueFree(virJSONValuePtr value);
void virJSONValueHashFree(void *opaque, const void *name);
void virJSONValueHashFree(void *opaque);
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);
}

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;
virLockSpaceResourceFree(res);

View File

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

View File

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

View File

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