diff --git a/src/hypervisor/domain_job.c b/src/hypervisor/domain_job.c index 1cd9b8d728..804a58047f 100644 --- a/src/hypervisor/domain_job.c +++ b/src/hypervisor/domain_job.c @@ -174,3 +174,35 @@ virDomainObjResetAsyncJob(virDomainJobObj *job) if (job->cb) job->cb->resetJobPrivate(job->privateData); } + +/** + * virDomainObjPreserveJob + * @param currJob structure is a job that needs to be preserved + * @param job structure where to store job details from @currJob + * + * Saves the current job details from @currJob to @job and resets the job in @currJob. + * + * Returns 0 on success, -1 on failure. + */ +int +virDomainObjPreserveJob(virDomainJobObj *currJob, + virDomainJobObj *job) +{ + memset(job, 0, sizeof(*job)); + job->active = currJob->active; + job->owner = currJob->owner; + job->asyncJob = currJob->asyncJob; + job->asyncOwner = currJob->asyncOwner; + job->phase = currJob->phase; + job->privateData = g_steal_pointer(&currJob->privateData); + job->apiFlags = currJob->apiFlags; + + if (currJob->cb && + !(currJob->privateData = currJob->cb->allocJobPrivate())) + return -1; + job->cb = currJob->cb; + + virDomainObjResetJob(currJob); + virDomainObjResetAsyncJob(currJob); + return 0; +} diff --git a/src/hypervisor/domain_job.h b/src/hypervisor/domain_job.h index f857fccce2..44e4bfdb4a 100644 --- a/src/hypervisor/domain_job.h +++ b/src/hypervisor/domain_job.h @@ -214,3 +214,6 @@ void virDomainObjResetJob(virDomainJobObj *job); void virDomainObjResetAgentJob(virDomainJobObj *job); void virDomainObjResetAsyncJob(virDomainJobObj *job); + +int virDomainObjPreserveJob(virDomainJobObj *currJob, + virDomainJobObj *job); diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index a0acb8fb95..abb4f85956 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1595,6 +1595,7 @@ virDomainJobStatusToType; virDomainJobTypeFromString; virDomainJobTypeToString; virDomainObjInitJob; +virDomainObjPreserveJob; virDomainObjResetAgentJob; virDomainObjResetAsyncJob; virDomainObjResetJob; diff --git a/src/qemu/qemu_domainjob.c b/src/qemu/qemu_domainjob.c index 260717aa88..4b8ba3f0bc 100644 --- a/src/qemu/qemu_domainjob.c +++ b/src/qemu/qemu_domainjob.c @@ -150,39 +150,6 @@ qemuDomainEventEmitJobCompleted(virQEMUDriver *driver, } -/** - * qemuDomainObjPreserveJob - * @param obj domain with a job that needs to be preserved - * @param job structure where to store job details from @obj - * - * Saves the current job details from @obj to @job and resets the job in @obj. - * - * Returns 0 on success, -1 on failure. - */ -int -qemuDomainObjPreserveJob(virDomainJobObj *currJob, - virDomainJobObj *job) -{ - memset(job, 0, sizeof(*job)); - job->active = currJob->active; - job->owner = currJob->owner; - job->asyncJob = currJob->asyncJob; - job->asyncOwner = currJob->asyncOwner; - job->phase = currJob->phase; - job->privateData = g_steal_pointer(&currJob->privateData); - job->apiFlags = currJob->apiFlags; - - if (currJob->cb && - !(currJob->privateData = currJob->cb->allocJobPrivate())) - return -1; - job->cb = currJob->cb; - - virDomainObjResetJob(currJob); - virDomainObjResetAsyncJob(currJob); - return 0; -} - - void qemuDomainObjRestoreAsyncJob(virDomainObj *vm, virDomainAsyncJob asyncJob, diff --git a/src/qemu/qemu_domainjob.h b/src/qemu/qemu_domainjob.h index a0cd79c705..6272f9d845 100644 --- a/src/qemu/qemu_domainjob.h +++ b/src/qemu/qemu_domainjob.h @@ -105,8 +105,6 @@ qemuDomainObjStartJobPhase(virDomainObj *obj, int phase); void qemuDomainObjSetAsyncJobMask(virDomainObj *obj, unsigned long long allowedJobs); -int qemuDomainObjPreserveJob(virDomainJobObj *currJob, - virDomainJobObj *job); void qemuDomainObjRestoreAsyncJob(virDomainObj *vm, virDomainAsyncJob asyncJob, diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 22c70b2ab4..478a46bff6 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -8879,7 +8879,7 @@ qemuProcessReconnect(void *opaque) cfg = virQEMUDriverGetConfig(driver); priv = obj->privateData; - qemuDomainObjPreserveJob(&priv->job, &oldjob); + virDomainObjPreserveJob(&priv->job, &oldjob); if (oldjob.asyncJob == VIR_ASYNC_JOB_MIGRATION_IN) stopFlags |= VIR_QEMU_PROCESS_STOP_MIGRATED; if (oldjob.asyncJob == VIR_ASYNC_JOB_BACKUP && priv->backup)