From aa47051bf44dee52a8cdedeefad38f8596cf5a70 Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Mon, 29 Aug 2022 16:59:44 +0200 Subject: [PATCH] virclosecallbacks: Remove old close callbacks code Now that all code was refactored to use the new version we can remove the old code. For now the new close callbacks code has no error messages so syntax-check forced me to remove the POTFILES entry for virclosecallbacks.c Signed-off-by: Peter Krempa Reviewed-by: Pavel Hrdina --- po/POTFILES | 1 - src/hypervisor/virclosecallbacks.c | 282 ----------------------------- src/hypervisor/virclosecallbacks.h | 27 --- src/libvirt_private.syms | 5 - 4 files changed, 315 deletions(-) diff --git a/po/POTFILES b/po/POTFILES index 169e2a41dc..b2297be84e 100644 --- a/po/POTFILES +++ b/po/POTFILES @@ -91,7 +91,6 @@ src/hyperv/hyperv_util.c src/hyperv/hyperv_wmi.c src/hypervisor/domain_cgroup.c src/hypervisor/domain_driver.c -src/hypervisor/virclosecallbacks.c src/hypervisor/virhostdev.c src/interface/interface_backend_netcf.c src/interface/interface_backend_udev.c diff --git a/src/hypervisor/virclosecallbacks.c b/src/hypervisor/virclosecallbacks.c index fd6226304e..ab27be4d6f 100644 --- a/src/hypervisor/virclosecallbacks.c +++ b/src/hypervisor/virclosecallbacks.c @@ -29,288 +29,6 @@ VIR_LOG_INIT("util.closecallbacks"); -typedef struct _virDriverCloseDef virDriverCloseDef; -struct _virDriverCloseDef { - virConnectPtr conn; - virCloseCallback cb; -}; - -struct _virCloseCallbacks { - virObjectLockable parent; - - /* UUID string to qemuDriverCloseDef mapping */ - GHashTable *list; -}; - - -static virClass *virCloseCallbacksClass; -static void virCloseCallbacksDispose(void *obj); - -static int virCloseCallbacksOnceInit(void) -{ - if (!VIR_CLASS_NEW(virCloseCallbacks, virClassForObjectLockable())) - return -1; - - return 0; -} - -VIR_ONCE_GLOBAL_INIT(virCloseCallbacks); - - -virCloseCallbacks * -virCloseCallbacksNew(void) -{ - virCloseCallbacks *closeCallbacks; - - if (virCloseCallbacksInitialize() < 0) - return NULL; - - if (!(closeCallbacks = virObjectLockableNew(virCloseCallbacksClass))) - return NULL; - - closeCallbacks->list = virHashNew(g_free); - - return closeCallbacks; -} - -static void -virCloseCallbacksDispose(void *obj) -{ - virCloseCallbacks *closeCallbacks = obj; - - g_clear_pointer(&closeCallbacks->list, g_hash_table_unref); -} - -int -virCloseCallbacksSet(virCloseCallbacks *closeCallbacks, - virDomainObj *vm, - virConnectPtr conn, - virCloseCallback cb) -{ - char uuidstr[VIR_UUID_STRING_BUFLEN]; - virDriverCloseDef *closeDef; - int ret = -1; - - virUUIDFormat(vm->def->uuid, uuidstr); - VIR_DEBUG("vm=%s, uuid=%s, conn=%p, cb=%p", - vm->def->name, uuidstr, conn, cb); - - virObjectLock(closeCallbacks); - - closeDef = virHashLookup(closeCallbacks->list, uuidstr); - if (closeDef) { - if (closeDef->conn != conn) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Close callback for domain %s already registered" - " with another connection %p"), - vm->def->name, closeDef->conn); - goto cleanup; - } - if (closeDef->cb && closeDef->cb != cb) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Another close callback is already defined for" - " domain %s"), vm->def->name); - goto cleanup; - } - - closeDef->cb = cb; - } else { - closeDef = g_new0(virDriverCloseDef, 1); - closeDef->conn = conn; - closeDef->cb = cb; - if (virHashAddEntry(closeCallbacks->list, uuidstr, closeDef) < 0) { - VIR_FREE(closeDef); - goto cleanup; - } - virObjectRef(vm); - } - - virObjectRef(closeCallbacks); - ret = 0; - cleanup: - virObjectUnlock(closeCallbacks); - return ret; -} - -int -virCloseCallbacksUnset(virCloseCallbacks *closeCallbacks, - virDomainObj *vm, - virCloseCallback cb) -{ - char uuidstr[VIR_UUID_STRING_BUFLEN]; - virDriverCloseDef *closeDef; - int ret = -1; - - virUUIDFormat(vm->def->uuid, uuidstr); - VIR_DEBUG("vm=%s, uuid=%s, cb=%p", - vm->def->name, uuidstr, cb); - - virObjectLock(closeCallbacks); - - closeDef = virHashLookup(closeCallbacks->list, uuidstr); - if (!closeDef) - goto cleanup; - - if (closeDef->cb && closeDef->cb != cb) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Trying to remove mismatching close callback for" - " domain %s"), vm->def->name); - goto cleanup; - } - - if (virHashRemoveEntry(closeCallbacks->list, uuidstr) < 0) - goto cleanup; - - virObjectUnref(vm); - ret = 0; - cleanup: - virObjectUnlock(closeCallbacks); - if (!ret) - virObjectUnref(closeCallbacks); - return ret; -} - -virCloseCallback -virCloseCallbacksGet(virCloseCallbacks *closeCallbacks, - virDomainObj *vm, - virConnectPtr conn) -{ - char uuidstr[VIR_UUID_STRING_BUFLEN]; - virDriverCloseDef *closeDef; - virCloseCallback cb = NULL; - - virUUIDFormat(vm->def->uuid, uuidstr); - VIR_DEBUG("vm=%s, uuid=%s, conn=%p", - vm->def->name, uuidstr, conn); - - virObjectLock(closeCallbacks); - - closeDef = virHashLookup(closeCallbacks->list, uuidstr); - if (closeDef && (!conn || closeDef->conn == conn)) - cb = closeDef->cb; - - virObjectUnlock(closeCallbacks); - - VIR_DEBUG("cb=%p", cb); - return cb; -} - -typedef struct _virCloseCallbacksListEntry virCloseCallbacksListEntry; -struct _virCloseCallbacksListEntry { - unsigned char uuid[VIR_UUID_BUFLEN]; - virCloseCallback callback; -}; - -typedef struct _virCloseCallbacksList virCloseCallbacksList; -struct _virCloseCallbacksList { - size_t nentries; - virCloseCallbacksListEntry *entries; -}; - -struct virCloseCallbacksData { - virConnectPtr conn; - virCloseCallbacksList *list; -}; - -static int -virCloseCallbacksGetOne(void *payload, - const char *key, - void *opaque) -{ - struct virCloseCallbacksData *data = opaque; - virDriverCloseDef *closeDef = payload; - const char *uuidstr = key; - unsigned char uuid[VIR_UUID_BUFLEN]; - - if (virUUIDParse(uuidstr, uuid) < 0) - return 0; - - VIR_DEBUG("conn=%p, thisconn=%p, uuid=%s, cb=%p", - closeDef->conn, data->conn, uuidstr, closeDef->cb); - - if (data->conn != closeDef->conn || !closeDef->cb) - return 0; - - VIR_EXPAND_N(data->list->entries, data->list->nentries, 1); - - memcpy(data->list->entries[data->list->nentries - 1].uuid, - uuid, VIR_UUID_BUFLEN); - data->list->entries[data->list->nentries - 1].callback = closeDef->cb; - return 0; -} - -static virCloseCallbacksList * -virCloseCallbacksGetForConn(virCloseCallbacks *closeCallbacks, - virConnectPtr conn) -{ - virCloseCallbacksList *list = NULL; - struct virCloseCallbacksData data; - - list = g_new0(virCloseCallbacksList, 1); - - data.conn = conn; - data.list = list; - - virHashForEach(closeCallbacks->list, virCloseCallbacksGetOne, &data); - - return list; -} - - -void -virCloseCallbacksRun(virCloseCallbacks *closeCallbacks, - virConnectPtr conn, - virDomainObjList *domains) -{ - virCloseCallbacksList *list; - size_t i; - - VIR_DEBUG("conn=%p", conn); - - /* We must not hold the lock while running the callbacks, - * so first we obtain the list of callbacks, then remove - * them all from the hash. At that point we can release - * the lock and run the callbacks safely. */ - - virObjectLock(closeCallbacks); - list = virCloseCallbacksGetForConn(closeCallbacks, conn); - if (!list) { - virObjectUnlock(closeCallbacks); - return; - } - - for (i = 0; i < list->nentries; i++) { - char uuidstr[VIR_UUID_STRING_BUFLEN]; - virUUIDFormat(list->entries[i].uuid, uuidstr); - virHashRemoveEntry(closeCallbacks->list, uuidstr); - } - virObjectUnlock(closeCallbacks); - - for (i = 0; i < list->nentries; i++) { - virDomainObj *vm; - - /* Grab a ref and lock to the vm */ - if (!(vm = virDomainObjListFindByUUID(domains, - list->entries[i].uuid))) { - char uuidstr[VIR_UUID_STRING_BUFLEN]; - virUUIDFormat(list->entries[i].uuid, uuidstr); - VIR_DEBUG("No domain object with UUID %s", uuidstr); - continue; - } - - /* Remove the ref taken out during virCloseCallbacksSet since - * we're about to call the callback function and we have another - * ref anyway (so it cannot be deleted). - * - * Call the callback function and end the API usage. */ - virObjectUnref(vm); - list->entries[i].callback(vm, conn); - virDomainObjEndAPI(&vm); - } - VIR_FREE(list->entries); - VIR_FREE(list); -} - struct _virCloseCallbacksDomainData { virConnectPtr conn; diff --git a/src/hypervisor/virclosecallbacks.h b/src/hypervisor/virclosecallbacks.h index 0f4c08572c..cde93e8be5 100644 --- a/src/hypervisor/virclosecallbacks.h +++ b/src/hypervisor/virclosecallbacks.h @@ -22,36 +22,9 @@ #include "conf/virdomainobjlist.h" -typedef struct _virCloseCallbacks virCloseCallbacks; - typedef void (*virCloseCallback)(virDomainObj *vm, virConnectPtr conn); -virCloseCallbacks * -virCloseCallbacksNew(void); - -int -virCloseCallbacksSet(virCloseCallbacks *closeCallbacks, - virDomainObj *vm, - virConnectPtr conn, - virCloseCallback cb); -int -virCloseCallbacksUnset(virCloseCallbacks *closeCallbacks, - virDomainObj *vm, - virCloseCallback cb); - -virCloseCallback -virCloseCallbacksGet(virCloseCallbacks *closeCallbacks, - virDomainObj *vm, - virConnectPtr conn); - -void -virCloseCallbacksRun(virCloseCallbacks *closeCallbacks, - virConnectPtr conn, - virDomainObjList *domains); - -/* ---- */ - virObject * virCloseCallbacksDomainAlloc(void); diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index b1fa23729a..b81c2cc7da 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1612,11 +1612,6 @@ virCloseCallbacksDomainAlloc; virCloseCallbacksDomainIsRegistered; virCloseCallbacksDomainRemove; virCloseCallbacksDomainRunForConn; -virCloseCallbacksGet; -virCloseCallbacksNew; -virCloseCallbacksRun; -virCloseCallbacksSet; -virCloseCallbacksUnset; # hypervisor/virhostdev.h