[libvirt] [PATCH 0/2] Change virCloseCallback typedef to return void

Slightly related to some current work to clean up the Add/Remove domain object list processing - as it turns out the close callbacks run code didn't even pay attention to what was returned and it really didn't need to - so let's just call it what it is a void function and let the virCloseCallbacksRun code handle the object manipulation (lock/ref and unlock/unref). John Ferlan (2): qemu: Fix qemuProcessAutoDestroy util: Alter virCloseCallback typedef to return void src/bhyve/bhyve_process.c | 8 ++------ src/lxc/lxc_process.c | 8 ++------ src/qemu/qemu_migration.c | 7 ++----- src/qemu/qemu_process.c | 10 ++-------- src/util/virclosecallbacks.c | 5 ++--- src/util/virclosecallbacks.h | 6 +++--- 6 files changed, 13 insertions(+), 31 deletions(-) -- 2.13.6

Upon entry from virCloseCallbacksRun, the @dom will have a Ref and Lock from virDomainObjListFindByUUIDRef, so there's no need to take an extra reference nor should the code call virDomainObjEndAPI when done since that both Unref's and Unlock's the @dom which means the callers call to EndAPI would be unlocking an unlocked object. At least the Ref saved the code from referencing something already freed. Signed-off-by: John Ferlan <jferlan@redhat.com> --- src/qemu/qemu_process.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 1afb71f11..14f197e7f 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -7057,8 +7057,6 @@ qemuProcessAutoDestroy(virDomainObjPtr dom, VIR_DEBUG("vm=%s, conn=%p", dom->def->name, conn); - virObjectRef(dom); - if (priv->job.asyncJob == QEMU_ASYNC_JOB_MIGRATION_IN) stopFlags |= VIR_QEMU_PROCESS_STOP_MIGRATED; @@ -7088,7 +7086,6 @@ qemuProcessAutoDestroy(virDomainObjPtr dom, qemuDomainEventQueue(driver, event); cleanup: - virDomainObjEndAPI(&dom); return dom; } -- 2.13.6

On Thu, Mar 29, 2018 at 02:48 PM +0200, John Ferlan <jferlan@redhat.com> wrote:
Upon entry from virCloseCallbacksRun, the @dom will have a Ref and Lock from virDomainObjListFindByUUIDRef, so there's no need to take an extra reference nor should the code call virDomainObjEndAPI when done since that both Unref's and Unlock's the @dom which means the callers call to EndAPI would be unlocking an unlocked object. At least the Ref saved the code from referencing something already freed.
Signed-off-by: John Ferlan <jferlan@redhat.com> --- src/qemu/qemu_process.c | 3 --- 1 file changed, 3 deletions(-)
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 1afb71f11..14f197e7f 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -7057,8 +7057,6 @@ qemuProcessAutoDestroy(virDomainObjPtr dom,
VIR_DEBUG("vm=%s, conn=%p", dom->def->name, conn);
- virObjectRef(dom); - if (priv->job.asyncJob == QEMU_ASYNC_JOB_MIGRATION_IN) stopFlags |= VIR_QEMU_PROCESS_STOP_MIGRATED;
@@ -7088,7 +7086,6 @@ qemuProcessAutoDestroy(virDomainObjPtr dom, qemuDomainEventQueue(driver, event);
cleanup: - virDomainObjEndAPI(&dom); return dom; }
-- 2.13.6
-- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
Reviewed-by: Marc Hartmayer <mhartmay@linux.vnet.ibm.com> -- Beste Grüße / Kind regards Marc Hartmayer IBM Deutschland Research & Development GmbH Vorsitzende des Aufsichtsrats: Martina Koederitz Geschäftsführung: Dirk Wittkopp Sitz der Gesellschaft: Böblingen Registergericht: Amtsgericht Stuttgart, HRB 243294

Since virCloseCallbacksRun was ignoring the value anyway, let's just change it to be a void function. Signed-off-by: John Ferlan <jferlan@redhat.com> --- src/bhyve/bhyve_process.c | 8 ++------ src/lxc/lxc_process.c | 8 ++------ src/qemu/qemu_migration.c | 7 ++----- src/qemu/qemu_process.c | 7 ++----- src/util/virclosecallbacks.c | 5 ++--- src/util/virclosecallbacks.h | 6 +++--- 6 files changed, 13 insertions(+), 28 deletions(-) diff --git a/src/bhyve/bhyve_process.c b/src/bhyve/bhyve_process.c index 4ff6257f8..9276d7d36 100644 --- a/src/bhyve/bhyve_process.c +++ b/src/bhyve/bhyve_process.c @@ -53,7 +53,7 @@ VIR_LOG_INIT("bhyve.bhyve_process"); -static virDomainObjPtr +static void bhyveProcessAutoDestroy(virDomainObjPtr vm, virConnectPtr conn ATTRIBUTE_UNUSED, void *opaque) @@ -62,12 +62,8 @@ bhyveProcessAutoDestroy(virDomainObjPtr vm, virBhyveProcessStop(driver, vm, VIR_DOMAIN_SHUTOFF_DESTROYED); - if (!vm->persistent) { + if (!vm->persistent) virDomainObjListRemove(driver->domains, vm); - vm = NULL; - } - - return vm; } static void diff --git a/src/lxc/lxc_process.c b/src/lxc/lxc_process.c index bc321e360..c155bd9d4 100644 --- a/src/lxc/lxc_process.c +++ b/src/lxc/lxc_process.c @@ -59,7 +59,7 @@ VIR_LOG_INIT("lxc.lxc_process"); #define START_POSTFIX ": starting up\n" -static virDomainObjPtr +static void lxcProcessAutoDestroy(virDomainObjPtr dom, virConnectPtr conn, void *opaque) @@ -79,15 +79,11 @@ lxcProcessAutoDestroy(virDomainObjPtr dom, VIR_DOMAIN_EVENT_STOPPED_DESTROYED); priv->doneStopEvent = true; - if (!dom->persistent) { + if (!dom->persistent) virDomainObjListRemove(driver->domains, dom); - dom = NULL; - } if (event) virObjectEventStateQueue(driver->domainEventState, event); - - return dom; } /* diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index e5231555d..256b994bd 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -1954,7 +1954,7 @@ qemuMigrationDstRun(virQEMUDriverPtr driver, * qemuDomainMigrateBegin3 and qemuDomainMigratePerform3 or * qemuDomainMigratePerform3 and qemuDomainMigrateConfirm3. */ -static virDomainObjPtr +static void qemuMigrationSrcCleanup(virDomainObjPtr vm, virConnectPtr conn, void *opaque) @@ -1969,7 +1969,7 @@ qemuMigrationSrcCleanup(virDomainObjPtr vm, priv->job.phase)); if (!qemuMigrationJobIsActive(vm, QEMU_ASYNC_JOB_MIGRATION_OUT)) - goto cleanup; + return; VIR_DEBUG("The connection which started outgoing migration of domain %s" " was closed; canceling the migration", @@ -2005,9 +2005,6 @@ qemuMigrationSrcCleanup(virDomainObjPtr vm, /* unreachable */ ; } - - cleanup: - return vm; } diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 14f197e7f..288409685 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -7045,7 +7045,7 @@ int qemuProcessAttach(virConnectPtr conn ATTRIBUTE_UNUSED, } -static virDomainObjPtr +static void qemuProcessAutoDestroy(virDomainObjPtr dom, virConnectPtr conn, void *opaque) @@ -7069,7 +7069,7 @@ qemuProcessAutoDestroy(virDomainObjPtr dom, VIR_DEBUG("Killing domain"); if (qemuProcessBeginStopJob(driver, dom, QEMU_JOB_DESTROY, true) < 0) - goto cleanup; + return; qemuProcessStop(driver, dom, VIR_DOMAIN_SHUTOFF_DESTROYED, QEMU_ASYNC_JOB_NONE, stopFlags); @@ -7084,9 +7084,6 @@ qemuProcessAutoDestroy(virDomainObjPtr dom, qemuDomainObjEndJob(driver, dom); qemuDomainEventQueue(driver, event); - - cleanup: - return dom; } int qemuProcessAutoDestroyAdd(virQEMUDriverPtr driver, diff --git a/src/util/virclosecallbacks.c b/src/util/virclosecallbacks.c index 4db50e8b6..49dac6589 100644 --- a/src/util/virclosecallbacks.c +++ b/src/util/virclosecallbacks.c @@ -359,10 +359,9 @@ virCloseCallbacksRun(virCloseCallbacksPtr closeCallbacks, * we're about to call the callback function and we have another * ref anyway (so it cannot be deleted). * - * Call the callback function, ignoring the return since it might be - * NULL. Once we're done with the object, then end the API usage. */ + * Call the callback function and end the API usage. */ virObjectUnref(vm); - ignore_value(list->entries[i].callback(vm, conn, opaque)); + list->entries[i].callback(vm, conn, opaque); virDomainObjEndAPI(&vm); } VIR_FREE(list->entries); diff --git a/src/util/virclosecallbacks.h b/src/util/virclosecallbacks.h index d48997181..79ca635bd 100644 --- a/src/util/virclosecallbacks.h +++ b/src/util/virclosecallbacks.h @@ -30,9 +30,9 @@ typedef struct _virCloseCallbacks virCloseCallbacks; typedef virCloseCallbacks *virCloseCallbacksPtr; -typedef virDomainObjPtr (*virCloseCallback)(virDomainObjPtr vm, - virConnectPtr conn, - void *opaque); +typedef void (*virCloseCallback)(virDomainObjPtr vm, + virConnectPtr conn, + void *opaque); virCloseCallbacksPtr virCloseCallbacksNew(void); int virCloseCallbacksSet(virCloseCallbacksPtr closeCallbacks, virDomainObjPtr vm, -- 2.13.6

On Thu, Mar 29, 2018 at 02:48 PM +0200, John Ferlan <jferlan@redhat.com> wrote:
Since virCloseCallbacksRun was ignoring the value anyway, let's just change it to be a void function.
Signed-off-by: John Ferlan <jferlan@redhat.com> --- src/bhyve/bhyve_process.c | 8 ++------ src/lxc/lxc_process.c | 8 ++------ src/qemu/qemu_migration.c | 7 ++----- src/qemu/qemu_process.c | 7 ++----- src/util/virclosecallbacks.c | 5 ++--- src/util/virclosecallbacks.h | 6 +++--- 6 files changed, 13 insertions(+), 28 deletions(-)
diff --git a/src/bhyve/bhyve_process.c b/src/bhyve/bhyve_process.c index 4ff6257f8..9276d7d36 100644 --- a/src/bhyve/bhyve_process.c +++ b/src/bhyve/bhyve_process.c @@ -53,7 +53,7 @@
VIR_LOG_INIT("bhyve.bhyve_process");
-static virDomainObjPtr +static void bhyveProcessAutoDestroy(virDomainObjPtr vm, virConnectPtr conn ATTRIBUTE_UNUSED, void *opaque) @@ -62,12 +62,8 @@ bhyveProcessAutoDestroy(virDomainObjPtr vm,
virBhyveProcessStop(driver, vm, VIR_DOMAIN_SHUTOFF_DESTROYED);
- if (!vm->persistent) { + if (!vm->persistent) virDomainObjListRemove(driver->domains, vm); - vm = NULL; - } - - return vm; }
static void diff --git a/src/lxc/lxc_process.c b/src/lxc/lxc_process.c index bc321e360..c155bd9d4 100644 --- a/src/lxc/lxc_process.c +++ b/src/lxc/lxc_process.c @@ -59,7 +59,7 @@ VIR_LOG_INIT("lxc.lxc_process");
#define START_POSTFIX ": starting up\n"
-static virDomainObjPtr +static void lxcProcessAutoDestroy(virDomainObjPtr dom, virConnectPtr conn, void *opaque) @@ -79,15 +79,11 @@ lxcProcessAutoDestroy(virDomainObjPtr dom, VIR_DOMAIN_EVENT_STOPPED_DESTROYED); priv->doneStopEvent = true;
- if (!dom->persistent) { + if (!dom->persistent) virDomainObjListRemove(driver->domains, dom); - dom = NULL; - }
if (event) virObjectEventStateQueue(driver->domainEventState, event); - - return dom; }
/* diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index e5231555d..256b994bd 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -1954,7 +1954,7 @@ qemuMigrationDstRun(virQEMUDriverPtr driver, * qemuDomainMigrateBegin3 and qemuDomainMigratePerform3 or * qemuDomainMigratePerform3 and qemuDomainMigrateConfirm3. */ -static virDomainObjPtr +static void qemuMigrationSrcCleanup(virDomainObjPtr vm, virConnectPtr conn, void *opaque) @@ -1969,7 +1969,7 @@ qemuMigrationSrcCleanup(virDomainObjPtr vm, priv->job.phase));
if (!qemuMigrationJobIsActive(vm, QEMU_ASYNC_JOB_MIGRATION_OUT)) - goto cleanup; + return;
VIR_DEBUG("The connection which started outgoing migration of domain %s" " was closed; canceling the migration", @@ -2005,9 +2005,6 @@ qemuMigrationSrcCleanup(virDomainObjPtr vm, /* unreachable */ ; } - - cleanup: - return vm; }
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 14f197e7f..288409685 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -7045,7 +7045,7 @@ int qemuProcessAttach(virConnectPtr conn ATTRIBUTE_UNUSED, }
-static virDomainObjPtr +static void qemuProcessAutoDestroy(virDomainObjPtr dom, virConnectPtr conn, void *opaque) @@ -7069,7 +7069,7 @@ qemuProcessAutoDestroy(virDomainObjPtr dom, VIR_DEBUG("Killing domain");
if (qemuProcessBeginStopJob(driver, dom, QEMU_JOB_DESTROY, true) < 0) - goto cleanup; + return;
qemuProcessStop(driver, dom, VIR_DOMAIN_SHUTOFF_DESTROYED, QEMU_ASYNC_JOB_NONE, stopFlags); @@ -7084,9 +7084,6 @@ qemuProcessAutoDestroy(virDomainObjPtr dom, qemuDomainObjEndJob(driver, dom);
qemuDomainEventQueue(driver, event); - - cleanup: - return dom; }
int qemuProcessAutoDestroyAdd(virQEMUDriverPtr driver, diff --git a/src/util/virclosecallbacks.c b/src/util/virclosecallbacks.c index 4db50e8b6..49dac6589 100644 --- a/src/util/virclosecallbacks.c +++ b/src/util/virclosecallbacks.c @@ -359,10 +359,9 @@ virCloseCallbacksRun(virCloseCallbacksPtr closeCallbacks, * we're about to call the callback function and we have another * ref anyway (so it cannot be deleted). * - * Call the callback function, ignoring the return since it might be - * NULL. Once we're done with the object, then end the API usage. */ + * Call the callback function and end the API usage. */ virObjectUnref(vm); - ignore_value(list->entries[i].callback(vm, conn, opaque)); + list->entries[i].callback(vm, conn, opaque); virDomainObjEndAPI(&vm); } VIR_FREE(list->entries); diff --git a/src/util/virclosecallbacks.h b/src/util/virclosecallbacks.h index d48997181..79ca635bd 100644 --- a/src/util/virclosecallbacks.h +++ b/src/util/virclosecallbacks.h @@ -30,9 +30,9 @@ typedef struct _virCloseCallbacks virCloseCallbacks; typedef virCloseCallbacks *virCloseCallbacksPtr;
-typedef virDomainObjPtr (*virCloseCallback)(virDomainObjPtr vm, - virConnectPtr conn, - void *opaque); +typedef void (*virCloseCallback)(virDomainObjPtr vm, + virConnectPtr conn, + void *opaque); virCloseCallbacksPtr virCloseCallbacksNew(void); int virCloseCallbacksSet(virCloseCallbacksPtr closeCallbacks, virDomainObjPtr vm, -- 2.13.6
-- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
Reviewed-by: Marc Hartmayer <mhartmay@linux.vnet.ibm.com> -- Beste Grüße / Kind regards Marc Hartmayer IBM Deutschland Research & Development GmbH Vorsitzende des Aufsichtsrats: Martina Koederitz Geschäftsführung: Dirk Wittkopp Sitz der Gesellschaft: Böblingen Registergericht: Amtsgericht Stuttgart, HRB 243294

ping? Tks - John On 03/29/2018 08:48 AM, John Ferlan wrote:
Slightly related to some current work to clean up the Add/Remove domain object list processing - as it turns out the close callbacks run code didn't even pay attention to what was returned and it really didn't need to - so let's just call it what it is a void function and let the virCloseCallbacksRun code handle the object manipulation (lock/ref and unlock/unref).
John Ferlan (2): qemu: Fix qemuProcessAutoDestroy util: Alter virCloseCallback typedef to return void
src/bhyve/bhyve_process.c | 8 ++------ src/lxc/lxc_process.c | 8 ++------ src/qemu/qemu_migration.c | 7 ++----- src/qemu/qemu_process.c | 10 ++-------- src/util/virclosecallbacks.c | 5 ++--- src/util/virclosecallbacks.h | 6 +++--- 6 files changed, 13 insertions(+), 31 deletions(-)
participants (2)
-
John Ferlan
-
Marc Hartmayer