return virDomainXMLOptionNew(&virBhyveDriverDomainDefParserConfig,
&virBhyveDriverPrivateDataCallbacks,
&virBhyveDriverDomainXMLNamespace,
- NULL, NULL);
+ NULL, NULL, NULL);
}
virCHDriverDomainDefParserConfig.priv = driver;
return virDomainXMLOptionNew(&virCHDriverDomainDefParserConfig,
&virCHDriverPrivateDataCallbacks,
- NULL, NULL, NULL);
+ NULL, NULL, NULL, NULL);
}
virCHDriverConfig *
virDomainXMLPrivateDataCallbacks *priv,
virXMLNamespace *xmlns,
virDomainABIStability *abi,
- virSaveCookieCallbacks *saveCookie)
+ virSaveCookieCallbacks *saveCookie,
+ virDomainJobObjConfig *jobConfig)
{
virDomainXMLOption *xmlopt;
if (saveCookie)
xmlopt->saveCookie = *saveCookie;
+ if (jobConfig)
+ xmlopt->jobObjConfig = *jobConfig;
+
/* Technically this forbids to use one of Xerox's MAC address prefixes in
* our hypervisor drivers. This shouldn't ever be a problem.
*
virDomainObjDeprecationFree(dom);
virDomainSnapshotObjListFree(dom->snapshots);
virDomainCheckpointObjListFree(dom->checkpoints);
+ virDomainJobObjFree(dom->job);
}
virDomainObj *
if (!(domain->checkpoints = virDomainCheckpointObjListNew()))
goto error;
+ domain->job = g_new0(virDomainJobObj, 1);
+ if (virDomainObjInitJob(domain->job,
+ &xmlopt->jobObjConfig.cb,
+ &xmlopt->jobObjConfig.jobDataPrivateCb) < 0)
+ goto error;
+
virObjectLock(domain);
virDomainObjSetState(domain, VIR_DOMAIN_SHUTOFF,
VIR_DOMAIN_SHUTOFF_UNKNOWN);
#include "virsavecookie.h"
#include "virresctrl.h"
#include "virenum.h"
+#include "virdomainjob.h"
/* Flags for the 'type' field in virDomainDeviceDef */
typedef enum {
virObjectLockable parent;
virCond cond;
+ virDomainJobObj *job;
+
pid_t pid; /* 0 for no PID, avoid negative values like -1 */
virDomainStateReason state;
virDomainABIStabilityDomain domain;
};
+
+struct _virDomainJobObjConfig {
+ virDomainObjPrivateJobCallbacks cb;
+ virDomainJobDataPrivateDataCallbacks jobDataPrivateCb;
+ unsigned int maxQueuedJobs;
+};
+
virDomainXMLOption *virDomainXMLOptionNew(virDomainDefParserConfig *config,
virDomainXMLPrivateDataCallbacks *priv,
virXMLNamespace *xmlns,
virDomainABIStability *abi,
- virSaveCookieCallbacks *saveCookie);
+ virSaveCookieCallbacks *saveCookie,
+ virDomainJobObjConfig *jobConfig);
virSaveCookieCallbacks *
virDomainXMLOptionGetSaveCookie(virDomainXMLOption *xmlopt);
/* Snapshot postparse callbacks */
virDomainMomentPostParseCallback momentPostParse;
+
+ /* virDomainJobObj callbacks, private data callbacks and defaults */
+ virDomainJobObjConfig jobObjConfig;
};
G_DEFINE_AUTOPTR_CLEANUP_FUNC(virDomainXMLOption, virObjectUnref);
typedef struct _virDomainInputDef virDomainInputDef;
+typedef struct _virDomainJobObjConfig virDomainJobObjConfig;
+
typedef struct _virDomainKeyWrapDef virDomainKeyWrapDef;
typedef struct _virDomainLeaseDef virDomainLeaseDef;
#include "virthreadjob.h"
#include "virlog.h"
#include "virtime.h"
+#include "domain_conf.h"
#define VIR_FROM_THIS VIR_FROM_NONE
g_clear_pointer(&job->privateData, job->cb->freeJobPrivate);
}
+void
+virDomainJobObjFree(virDomainJobObj *job)
+{
+ if (!job)
+ return;
+
+ virDomainObjClearJob(job);
+ g_free(job);
+}
+
bool
virDomainTrackJob(virDomainJob job)
{
#include "virenum.h"
#include "virthread.h"
#include "virbuffer.h"
-#include "domain_conf.h"
+#include "virconftypes.h"
+#include "virxml.h"
#define JOB_MASK(job) (job == 0 ? 0 : 1 << (job - 1))
#define VIR_JOB_DEFAULT_MASK \
void virDomainObjClearJob(virDomainJobObj *job);
G_DEFINE_AUTO_CLEANUP_CLEAR_FUNC(virDomainJobObj, virDomainObjClearJob);
+void virDomainJobObjFree(virDomainJobObj *job);
+
bool virDomainTrackJob(virDomainJob job);
bool virDomainNestedJobAllowed(virDomainJobObj *jobs, virDomainJob newJob);
goto cleanup;
/* init xmlopt for domain XML */
- priv->xmlopt = virDomainXMLOptionNew(&hypervDomainDefParserConfig, NULL, NULL, NULL, NULL);
+ priv->xmlopt = virDomainXMLOptionNew(&hypervDomainDefParserConfig, NULL, NULL, NULL, NULL, NULL);
if (hypervGetOperatingSystem(priv, &os) < 0)
goto cleanup;
virDomainJobDataCopy;
virDomainJobDataFree;
virDomainJobDataInit;
+virDomainJobObjFree;
virDomainJobStatusToType;
virDomainJobTypeFromString;
virDomainJobTypeToString;
return virDomainXMLOptionNew(&libxlDomainDefParserConfig,
&libxlDomainXMLPrivateDataCallbacks,
&libxlDriverDomainXMLNamespace,
- NULL, NULL);
+ NULL, NULL, NULL);
}
return virDomainXMLOptionNew(&virLXCDriverDomainDefParserConfig,
&virLXCDriverPrivateDataCallbacks,
&virLXCDriverDomainXMLNamespace,
- NULL, NULL);
+ NULL, NULL, NULL);
}
{
openvzDomainDefParserConfig.priv = driver;
return virDomainXMLOptionNew(&openvzDomainDefParserConfig,
- NULL, NULL, NULL, NULL);
+ NULL, NULL, NULL, NULL, NULL);
}
&virQEMUDriverPrivateDataCallbacks,
&virQEMUDriverDomainXMLNamespace,
&virQEMUDriverDomainABIStability,
- &virQEMUDriverDomainSaveCookie);
+ &virQEMUDriverDomainSaveCookie,
+ NULL);
}
monConfig.data.nix.path = proc->monpath;
monConfig.data.nix.listen = false;
- if (!(xmlopt = virDomainXMLOptionNew(NULL, NULL, NULL, NULL, NULL)) ||
+ if (!(xmlopt = virDomainXMLOptionNew(NULL, NULL, NULL, NULL, NULL, NULL)) ||
!(proc->vm = virDomainObjNew(xmlopt)) ||
!(proc->vm->def = virDomainDefNew(xmlopt)))
return -1;
}
if (!(ctl->xmlopt = virDomainXMLOptionNew(&virAAHelperDomainDefParserConfig,
- NULL, NULL, NULL, NULL))) {
+ NULL, NULL, NULL, NULL, NULL))) {
vah_error(ctl, 0, _("Failed to create XML config object"));
return -1;
}
if (!(ret = virObjectLockableNew(testDriverClass)))
return NULL;
- if (!(ret->xmlopt = virDomainXMLOptionNew(&config, &privatecb, &ns, NULL, NULL)) ||
+ if (!(ret->xmlopt = virDomainXMLOptionNew(&config, &privatecb, &ns, NULL, NULL, NULL)) ||
!(ret->eventState = virObjectEventStateNew()) ||
!(ret->ifaces = virInterfaceObjListNew()) ||
!(ret->domains = virDomainObjListNew()) ||
if (!(driver->caps = vboxCapsInit()) ||
!(driver->xmlopt = virDomainXMLOptionNew(&vboxDomainDefParserConfig,
- NULL, NULL, NULL, NULL)))
+ NULL, NULL, NULL, NULL, NULL)))
goto cleanup;
return driver;
.free = vmwareDataFreeFunc };
vmwareDomainDefParserConfig.priv = driver;
return virDomainXMLOptionNew(&vmwareDomainDefParserConfig, &priv,
- NULL, NULL, NULL);
+ NULL, NULL, NULL, NULL);
}
static virDrvOpenStatus
{
virVMXDomainDefParserConfig.priv = caps;
return virDomainXMLOptionNew(&virVMXDomainDefParserConfig, NULL,
- &virVMXDomainXMLNamespace, NULL, NULL);
+ &virVMXDomainXMLNamespace, NULL, NULL, NULL);
}
char *
if (!(driver->caps = vzBuildCapabilities()) ||
!(driver->xmlopt = virDomainXMLOptionNew(&vzDomainDefParserConfig,
&vzDomainXMLPrivateDataCallbacksPtr,
- NULL, NULL, NULL)) ||
+ NULL, NULL, NULL, NULL)) ||
!(driver->domains = virDomainObjListNew()) ||
!(driver->domainEventState = virObjectEventStateNew()) ||
(vzInitVersion(driver) < 0) ||
if ((driver.caps = virBhyveCapsBuild()) == NULL)
return EXIT_FAILURE;
- if ((driver.xmlopt = virDomainXMLOptionNew(NULL, NULL,
+ if ((driver.xmlopt = virDomainXMLOptionNew(NULL, NULL, NULL,
NULL, NULL, NULL)) == NULL)
return EXIT_FAILURE;
virDomainXMLOption *virTestGenericDomainXMLConfInit(void)
{
return virDomainXMLOptionNew(&virTestGenericDomainDefParserConfig,
- NULL, NULL, NULL, NULL);
+ NULL, NULL, NULL, NULL, NULL);
}