[libvirt] [PATCH v2 06/10] vz: introduce new vzDriver lockable structure and use it
Maxim Nestratov
mnestratov at virtuozzo.com
Tue Apr 12 18:12:16 UTC 2016
12.04.2016 14:11, Nikolay Shirokovskiy пишет:
>
> On 07.04.2016 23:09, Maxim Nestratov wrote:
>> This patch introduces a new 'vzDriver' lockable object and provides
>> helper functions to allocate/destroy it and we pass it to prlsdkXxx
>> functions instead of virConnectPtr.
>> Now we store domain related objects such as domain list, capabitilies
>> etc. within a single vz_driver vzDriver structure, which is shared by
>> all driver connections. It is allocated during daemon initialization or
>> in a lazy manner when a new connection to 'vz' driver is established.
>> When a connection to vz daemon drops, vzDestroyConnection is called,
>> which in turn relays disconnect event to all connection to 'vz' driver.
>>
>> Signed-off-by: Maxim Nestratov <mnestratov at virtuozzo.com>
>> ---
>> src/vz/vz_driver.c | 339 +++++++++++++++++++++++++++++++++++------------------
>> src/vz/vz_sdk.c | 211 ++++++++++++++++-----------------
>> src/vz/vz_sdk.h | 30 ++---
>> src/vz/vz_utils.c | 27 +++--
>> src/vz/vz_utils.h | 29 ++++-
>> 5 files changed, 380 insertions(+), 256 deletions(-)
>>
>> diff --git a/src/vz/vz_driver.c b/src/vz/vz_driver.c
>> index f2bbf1e..e9fe89f 100644
>> --- a/src/vz/vz_driver.c
>> +++ b/src/vz/vz_driver.c
>> @@ -63,18 +63,25 @@ VIR_LOG_INIT("parallels.parallels_driver");
>> #define PRLCTL "prlctl"
>>
>> static int vzConnectClose(virConnectPtr conn);
>> +static virClassPtr vzDriverConnClass;
> why 'conn' suffix? i suggest just vzDriverClass
fixed
>
>>
>> void
>> -vzDriverLock(vzConnPtr driver)
>> +vzDriverLock(vzConnPtr privconn)
>> {
>> - virMutexLock(&driver->lock);
>> + virObjectLock(privconn->driver);
>> }
>>
>> void
>> -vzDriverUnlock(vzConnPtr driver)
>> +vzDriverUnlock(vzConnPtr privconn)
>> {
>> - virMutexUnlock(&driver->lock);
>> + virObjectUnlock(privconn->driver);
>> }
> empty line here will be good
agree
>> +static virMutex vz_driver_lock;
>> +static vzDriverPtr vz_driver;
>> +static vzConnPtr vz_conn_list;
> i would move this list into driver,
> i even think if we could write version of close callback object
> that can take multiple callbacks, thus we can get rid of vz_conn_list
> and vzConn altogether.
not sure about moving
as for a new version of close callback - certainly not in this patch series
>> +
>> +static vzDriverPtr
>> +vzDriverObjNew(void);
>>
>> static int
>> vzCapsAddGuestDomain(virCapsPtr caps,
>> @@ -158,6 +165,69 @@ vzBuildCapabilities(void)
>> goto cleanup;
>> }
>>
>> +static void vzDriverDispose(void * obj)
>> +{
>> + vzDriverPtr conn = obj;
> looks like 'driver' will be better here
agree
>
>> +
>> + if (conn->server) {
>> + prlsdkUnsubscribeFromPCSEvents(conn);
>> + prlsdkDisconnect(conn);
>> + }
>> +
>> + virObjectUnref(conn->domains);
>> + virObjectUnref(conn->caps);
>> + virObjectUnref(conn->xmlopt);
>> + virObjectEventStateFree(conn->domainEventState);
>> +}
>> +
>> +static int vzDriverOnceInit(void)
>> +{
>> + if (!(vzDriverConnClass = virClassNew(virClassForObjectLockable(),
>> + "vzDriver",
>> + sizeof(vzDriver),
>> + vzDriverDispose)))
> indentation
ahh, sure
>> + return -1;
>> +
>> + return 0;
>> +}
>> +VIR_ONCE_GLOBAL_INIT(vzDriver)
>> +
>> +vzDriverPtr
>> +vzGetDriverConnection(void)
>> +{
>> + virMutexLock(&vz_driver_lock);
>> + if (!vz_driver)
>> + vz_driver = vzDriverObjNew();
>> + virObjectRef(vz_driver);
>> + virMutexUnlock(&vz_driver_lock);
>> + return vz_driver;
>> +}
> i would put more empty lines here,
not sure, but if you insist...
> and since this func is pretty simple i suggest open code it in that new function
didn't get you, sorry
>
>> +
>> +void
>> +vzDestroyDriverConnection(void)
>> +{
>> +
>> + vzDriverPtr driver;
>> + vzConnPtr privconn_list;
>> +
>> + virMutexLock(&vz_driver_lock);
>> + driver = vz_driver;
>> + vz_driver = NULL;
>> +
>> + privconn_list = vz_conn_list;
>> + vz_conn_list = NULL;
>> +
>> + virMutexUnlock(&vz_driver_lock);
>> +
>> + while (privconn_list) {
>> + vzConnPtr privconn = privconn_list;
>> + privconn_list = privconn->next;
>> + virConnectCloseCallbackDataCall(privconn->closeCallback,
>> + VIR_CONNECT_CLOSE_REASON_EOF);
>> + }
>> + virObjectUnref(driver);
>> +}
>> +
>> static char *
>> vzConnectGetCapabilities(virConnectPtr conn)
>> {
>> @@ -165,7 +235,7 @@ vzConnectGetCapabilities(virConnectPtr conn)
>> char *xml;
>>
>> vzDriverLock(privconn);
>> - xml = virCapabilitiesFormatXML(privconn->caps);
>> + xml = virCapabilitiesFormatXML(privconn->driver->caps);
>> vzDriverUnlock(privconn);
>> return xml;
>> }
>> @@ -214,70 +284,34 @@ virDomainDefParserConfig vzDomainDefParserConfig = {
>> .domainPostParseCallback = vzDomainDefPostParse,
>> };
>>
>> -
>> -static int
>> -vzOpenDefault(virConnectPtr conn)
>> +static vzDriverPtr
>> +vzDriverObjNew(void)
>> {
>> - vzConnPtr privconn;
>> -
>> - if (VIR_ALLOC(privconn) < 0)
>> - return VIR_DRV_OPEN_ERROR;
>> - if (virMutexInit(&privconn->lock) < 0) {
>> - virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
>> - _("cannot initialize mutex"));
>> - goto err_free;
>> - }
>> + vzDriverPtr conn;
> i think 'driver' will be more comprehensible
sure, just forgot to change it since last version
>
>>
>> - if (prlsdkInit()) {
>> - VIR_DEBUG("%s", _("Can't initialize Parallels SDK"));
>> - goto err_free;
>> - }
>> -
>> - if (prlsdkConnect(privconn) < 0)
>> - goto err_free;
>> -
>> - if (vzInitVersion(privconn) < 0)
>> - goto error;
>> -
>> - if (!(privconn->caps = vzBuildCapabilities()))
>> - goto error;
>> -
>> - vzDomainDefParserConfig.priv = &privconn->vzCaps;
>> - if (!(privconn->xmlopt = virDomainXMLOptionNew(&vzDomainDefParserConfig,
>> - NULL, NULL)))
>> - goto error;
>> -
>> - if (!(privconn->domains = virDomainObjListNew()))
>> - goto error;
>> -
>> - if (!(privconn->domainEventState = virObjectEventStateNew()))
>> - goto error;
>> -
>> - if (prlsdkSubscribeToPCSEvents(privconn))
>> - goto error;
>> -
>> - if (!(privconn->closeCallback = virNewConnectCloseCallbackData()))
>> - goto error;
>> -
>> - conn->privateData = privconn;
>> + if (vzDriverInitialize() < 0)
>> + return NULL;
>>
>> - if (prlsdkLoadDomains(privconn))
>> - goto error;
>> + if (!(conn = virObjectLockableNew(vzDriverConnClass)))
>> + return NULL;
>>
>> - return VIR_DRV_OPEN_SUCCESS;
>> + vzDomainDefParserConfig.priv = &conn->vzCaps;
>> +
>> + if (!(conn->caps = vzBuildCapabilities()) ||
>> + !(conn->xmlopt = virDomainXMLOptionNew(&vzDomainDefParserConfig,
>> + NULL, NULL)) ||
>> + !(conn->domains = virDomainObjListNew()) ||
>> + !(conn->domainEventState = virObjectEventStateNew()) ||
>> + (vzInitVersion(conn) < 0) ||
>> + (prlsdkConnect(conn) < 0) ||
>> + (prlsdkSubscribeToPCSEvents(conn) < 0)
>> + ) {
>> + virObjectUnref(conn);
>> + return NULL;
>> + }
>>
>> - error:
>> - virObjectUnref(privconn->closeCallback);
>> - privconn->closeCallback = NULL;
>> - virObjectUnref(privconn->domains);
>> - virObjectUnref(privconn->caps);
>> - virObjectEventStateFree(privconn->domainEventState);
>> - prlsdkDisconnect(privconn);
>> - prlsdkDeinit();
>> - err_free:
>> - conn->privateData = NULL;
>> - VIR_FREE(privconn);
>> - return VIR_DRV_OPEN_ERROR;
>> + prlsdkLoadDomains(conn);
> failure should be checked
or just ignored since I intentionally did this but forgot to put it in
ignore_value()
>> + return conn;
>> }
>>
>> static virDrvOpenStatus
>> @@ -285,7 +319,8 @@ vzConnectOpen(virConnectPtr conn,
>> virConnectAuthPtr auth ATTRIBUTE_UNUSED,
>> unsigned int flags)
>> {
>> - int ret;
>> + vzDriverPtr driver = NULL;
>> + vzConnPtr privconn = NULL;
>>
>> virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR);
>>
>> @@ -317,36 +352,60 @@ vzConnectOpen(virConnectPtr conn,
>> return VIR_DRV_OPEN_ERROR;
>> }
>>
>> - if ((ret = vzOpenDefault(conn)) != VIR_DRV_OPEN_SUCCESS)
>> - return ret;
>> + if (!(driver = vzGetDriverConnection()))
>> + return VIR_DRV_OPEN_ERROR;
>> +
>> + if (VIR_ALLOC(privconn) < 0) {
>> +
>> + virObjectUnref(driver);
>> + return VIR_DRV_OPEN_ERROR;
>> + }
> you can just goto error here
ok, seems to be shorter...
>> +
>> + conn->privateData = privconn;
>> + privconn->driver = driver;
>> +
>> + if (!(privconn->closeCallback = virNewConnectCloseCallbackData()))
>> + goto error;
>> +
>> + virMutexLock(&vz_driver_lock);
>> + privconn->next = vz_conn_list;
>> + vz_conn_list = privconn;
>> + virMutexUnlock(&vz_driver_lock);
>>
>> return VIR_DRV_OPEN_SUCCESS;
>> +
>> + error:
>> +
>> + conn->privateData = NULL;
>> + virObjectUnref(driver);
>> + VIR_FREE(privconn);
>> + return VIR_DRV_OPEN_ERROR;
>> }
>>
>> static int
>> vzConnectClose(virConnectPtr conn)
>> {
>> + vzConnPtr curr, prev = NULL;
>> vzConnPtr privconn = conn->privateData;
>>
>> if (!privconn)
>> return 0;
>>
>> - vzDriverLock(privconn);
>> - prlsdkUnsubscribeFromPCSEvents(privconn);
>> - virObjectUnref(privconn->caps);
>> - virObjectUnref(privconn->xmlopt);
>> - virObjectUnref(privconn->domains);
>> - virObjectUnref(privconn->closeCallback);
>> - privconn->closeCallback = NULL;
>> - virObjectEventStateFree(privconn->domainEventState);
>> - prlsdkDisconnect(privconn);
>> - conn->privateData = NULL;
>> - prlsdkDeinit();
>> -
>> - vzDriverUnlock(privconn);
>> - virMutexDestroy(&privconn->lock);
>> + virMutexLock(&vz_driver_lock);
>> + for (curr = vz_conn_list; curr; prev = curr, curr = curr->next)
>> + if (curr == privconn) {
>> + if (prev)
>> + prev->next = curr->next;
>> + else
>> + vz_conn_list = curr->next;
>> + break;
>> + }
> i'd suggest use braces here for 'for' too, BTW you can reduce nesting
ok, makes sense
>
>> + virMutexUnlock(&vz_driver_lock);
>>
>> + virObjectUnref(privconn->closeCallback);
>> + virObjectUnref(privconn->driver);
>> VIR_FREE(privconn);
>> + conn->privateData = NULL;
>> return 0;
>> }
>>
>> @@ -354,7 +413,7 @@ static int
>> vzConnectGetVersion(virConnectPtr conn, unsigned long *hvVer)
>> {
>> vzConnPtr privconn = conn->privateData;
>> - *hvVer = privconn->vzVersion;
>> + *hvVer = privconn->driver->vzVersion;
>> return 0;
>> }
>>
>> @@ -372,7 +431,7 @@ vzConnectListDomains(virConnectPtr conn, int *ids, int maxids)
>> int n;
>>
>> vzDriverLock(privconn);
>> - n = virDomainObjListGetActiveIDs(privconn->domains, ids, maxids,
>> + n = virDomainObjListGetActiveIDs(privconn->driver->domains, ids, maxids,
>> NULL, NULL);
>> vzDriverUnlock(privconn);
>>
>> @@ -386,7 +445,7 @@ vzConnectNumOfDomains(virConnectPtr conn)
>> int count;
>>
>> vzDriverLock(privconn);
>> - count = virDomainObjListNumOfDomains(privconn->domains, true,
>> + count = virDomainObjListNumOfDomains(privconn->driver->domains, true,
>> NULL, NULL);
>> vzDriverUnlock(privconn);
>>
>> @@ -394,14 +453,16 @@ vzConnectNumOfDomains(virConnectPtr conn)
>> }
>>
>> static int
>> -vzConnectListDefinedDomains(virConnectPtr conn, char **const names, int maxnames)
>> +vzConnectListDefinedDomains(virConnectPtr conn,
>> + char **const names,
>> + int maxnames)
> unrelated
ok
>> {
>> vzConnPtr privconn = conn->privateData;
>> int n;
>>
>> vzDriverLock(privconn);
>> memset(names, 0, sizeof(*names) * maxnames);
>> - n = virDomainObjListGetInactiveNames(privconn->domains, names,
>> + n = virDomainObjListGetInactiveNames(privconn->driver->domains, names,
>> maxnames, NULL, NULL);
>> vzDriverUnlock(privconn);
>>
>> @@ -415,7 +476,7 @@ vzConnectNumOfDefinedDomains(virConnectPtr conn)
>> int count;
>>
>> vzDriverLock(privconn);
>> - count = virDomainObjListNumOfDomains(privconn->domains, false,
>> + count = virDomainObjListNumOfDomains(privconn->driver->domains, false,
>> NULL, NULL);
>> vzDriverUnlock(privconn);
>>
>> @@ -432,7 +493,7 @@ vzConnectListAllDomains(virConnectPtr conn,
>>
>> virCheckFlags(VIR_CONNECT_LIST_DOMAINS_FILTERS_ALL, -1);
>> vzDriverLock(privconn);
>> - ret = virDomainObjListExport(privconn->domains, conn, domains,
>> + ret = virDomainObjListExport(privconn->driver->domains, conn, domains,
>> NULL, flags);
>> vzDriverUnlock(privconn);
>>
>> @@ -447,7 +508,7 @@ vzDomainLookupByID(virConnectPtr conn, int id)
>> virDomainObjPtr dom;
>>
>> vzDriverLock(privconn);
>> - dom = virDomainObjListFindByID(privconn->domains, id);
>> + dom = virDomainObjListFindByID(privconn->driver->domains, id);
>> vzDriverUnlock(privconn);
>>
>> if (dom == NULL) {
>> @@ -473,7 +534,8 @@ vzDomainLookupByUUID(virConnectPtr conn, const unsigned char *uuid)
>> virDomainObjPtr dom;
>>
>> vzDriverLock(privconn);
>> - dom = virDomainObjListFindByUUID(privconn->domains, uuid);
>> +
>> + dom = virDomainObjListFindByUUID(privconn->driver->domains, uuid);
>> vzDriverUnlock(privconn);
>>
>> if (dom == NULL) {
>> @@ -502,7 +564,7 @@ vzDomainLookupByName(virConnectPtr conn, const char *name)
>> virDomainObjPtr dom;
>>
>> vzDriverLock(privconn);
>> - dom = virDomainObjListFindByName(privconn->domains, name);
>> + dom = virDomainObjListFindByName(privconn->driver->domains, name);
>> vzDriverUnlock(privconn);
>>
>> if (dom == NULL) {
>> @@ -626,7 +688,7 @@ vzDomainGetXMLDesc(virDomainPtr domain, unsigned int flags)
>> def = (flags & VIR_DOMAIN_XML_INACTIVE) &&
>> privdom->newDef ? privdom->newDef : privdom->def;
>>
>> - ret = virDomainDefFormat(def, privconn->caps, flags);
>> + ret = virDomainDefFormat(def, privconn->driver->caps, flags);
>>
>> cleanup:
>> if (privdom)
>> @@ -661,28 +723,29 @@ vzDomainDefineXMLFlags(virConnectPtr conn, const char *xml, unsigned int flags)
>> virDomainObjPtr olddom = NULL;
>> virDomainObjPtr newdom = NULL;
>> unsigned int parse_flags = VIR_DOMAIN_DEF_PARSE_INACTIVE;
>> + vzDriverPtr driver = privconn->driver;
>>
>> virCheckFlags(VIR_DOMAIN_DEFINE_VALIDATE, NULL);
>>
>> if (flags & VIR_DOMAIN_DEFINE_VALIDATE)
>> parse_flags |= VIR_DOMAIN_DEF_PARSE_VALIDATE;
>>
>> - vzDriverLock(privconn);
>> - if ((def = virDomainDefParseString(xml, privconn->caps, privconn->xmlopt,
>> + virObjectLock(driver);
>> + if ((def = virDomainDefParseString(xml, driver->caps, driver->xmlopt,
>> parse_flags)) == NULL)
>> goto cleanup;
>>
>> - olddom = virDomainObjListFindByUUID(privconn->domains, def->uuid);
>> + olddom = virDomainObjListFindByUUID(driver->domains, def->uuid);
>> if (olddom == NULL) {
>> virResetLastError();
>> - newdom = vzNewDomain(privconn, def->name, def->uuid);
>> + newdom = vzNewDomain(driver, def->name, def->uuid);
>> if (!newdom)
>> goto cleanup;
>> if (def->os.type == VIR_DOMAIN_OSTYPE_HVM) {
>> - if (prlsdkCreateVm(conn, def))
>> + if (prlsdkCreateVm(driver, def))
>> goto cleanup;
>> } else if (def->os.type == VIR_DOMAIN_OSTYPE_EXE) {
>> - if (prlsdkCreateCt(conn, def))
>> + if (prlsdkCreateCt(driver, def))
>> goto cleanup;
>> } else {
>> virReportError(VIR_ERR_INVALID_ARG,
>> @@ -691,7 +754,7 @@ vzDomainDefineXMLFlags(virConnectPtr conn, const char *xml, unsigned int flags)
>> goto cleanup;
>> }
>>
>> - if (prlsdkLoadDomain(privconn, newdom))
>> + if (prlsdkLoadDomain(driver, newdom))
>> goto cleanup;
>> } else {
>> int state, reason;
>> @@ -717,10 +780,10 @@ vzDomainDefineXMLFlags(virConnectPtr conn, const char *xml, unsigned int flags)
>> goto cleanup;
>> }
>> } else {
>> - if (prlsdkApplyConfig(conn, olddom, def))
>> + if (prlsdkApplyConfig(driver, olddom, def))
>> goto cleanup;
>>
>> - if (prlsdkUpdateDomain(privconn, olddom))
>> + if (prlsdkUpdateDomain(driver, olddom))
>> goto cleanup;
>> }
>> }
>> @@ -734,12 +797,12 @@ vzDomainDefineXMLFlags(virConnectPtr conn, const char *xml, unsigned int flags)
>> virObjectUnlock(olddom);
>> if (newdom) {
>> if (!retdom)
>> - virDomainObjListRemove(privconn->domains, newdom);
>> + virDomainObjListRemove(driver->domains, newdom);
>> else
>> virObjectUnlock(newdom);
>> }
>> virDomainDefFree(def);
>> - vzDriverUnlock(privconn);
>> + virObjectUnlock(driver);
>> return retdom;
>> }
>>
>> @@ -855,7 +918,7 @@ vzConnectDomainEventRegisterAny(virConnectPtr conn,
>> int ret = -1;
>> vzConnPtr privconn = conn->privateData;
>> if (virDomainEventStateRegisterID(conn,
>> - privconn->domainEventState,
>> + privconn->driver->domainEventState,
>> domain, eventID,
>> callback, opaque, freecb, &ret) < 0)
>> ret = -1;
>> @@ -870,7 +933,7 @@ vzConnectDomainEventDeregisterAny(virConnectPtr conn,
>> int ret = -1;
>>
>> if (virObjectEventStateDeregisterID(conn,
>> - privconn->domainEventState,
>> + privconn->driver->domainEventState,
>> callbackID) < 0)
>> goto cleanup;
>>
>> @@ -949,7 +1012,7 @@ vzDomainUndefineFlags(virDomainPtr domain,
>> if (!(dom = vzDomObjFromDomain(domain)))
>> return -1;
>>
>> - ret = prlsdkUnregisterDomain(privconn, dom, flags);
>> + ret = prlsdkUnregisterDomain(privconn->driver, dom, flags);
>> if (ret)
>> virObjectUnlock(dom);
>>
>> @@ -999,12 +1062,12 @@ vzDomainManagedSave(virDomainPtr domain, unsigned int flags)
>> state = virDomainObjGetState(dom, &reason);
>>
>> if (state == VIR_DOMAIN_RUNNING && (flags & VIR_DOMAIN_SAVE_PAUSED)) {
>> - ret = prlsdkDomainChangeStateLocked(privconn, dom, prlsdkPause);
>> + ret = prlsdkDomainChangeStateLocked(privconn->driver, dom, prlsdkPause);
>> if (ret)
>> goto cleanup;
>> }
>>
>> - ret = prlsdkDomainChangeStateLocked(privconn, dom, prlsdkSuspend);
>> + ret = prlsdkDomainChangeStateLocked(privconn->driver, dom, prlsdkSuspend);
>>
>> cleanup:
>> virObjectUnlock(dom);
>> @@ -1070,14 +1133,14 @@ static int vzDomainAttachDeviceFlags(virDomainPtr dom, const char *xml,
>> "VIR_DOMAIN_AFFECT_LIVE flag"));
>> }
>>
>> - dev = virDomainDeviceDefParse(xml, privdom->def, privconn->caps,
>> - privconn->xmlopt, VIR_DOMAIN_XML_INACTIVE);
>> + dev = virDomainDeviceDefParse(xml, privdom->def, privconn->driver->caps,
>> + privconn->driver->xmlopt, VIR_DOMAIN_XML_INACTIVE);
>> if (dev == NULL)
>> goto cleanup;
>>
>> switch (dev->type) {
>> case VIR_DOMAIN_DEVICE_DISK:
>> - ret = prlsdkAttachVolume(privconn, privdom, dev->data.disk);
>> + ret = prlsdkAttachVolume(privconn->driver, privdom, dev->data.disk);
>> if (ret) {
>> virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
>> _("disk attach failed"));
>> @@ -1085,7 +1148,7 @@ static int vzDomainAttachDeviceFlags(virDomainPtr dom, const char *xml,
>> }
>> break;
>> case VIR_DOMAIN_DEVICE_NET:
>> - ret = prlsdkAttachNet(privconn, privdom, dev->data.net);
>> + ret = prlsdkAttachNet(privconn->driver, privdom, dev->data.net);
>> if (ret) {
>> virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
>> _("network attach failed"));
>> @@ -1147,8 +1210,8 @@ static int vzDomainDetachDeviceFlags(virDomainPtr dom, const char *xml,
>> "VIR_DOMAIN_AFFECT_LIVE flag"));
>> }
>>
>> - dev = virDomainDeviceDefParse(xml, privdom->def, privconn->caps,
>> - privconn->xmlopt, VIR_DOMAIN_XML_INACTIVE);
>> + dev = virDomainDeviceDefParse(xml, privdom->def, privconn->driver->caps,
>> + privconn->driver->xmlopt, VIR_DOMAIN_XML_INACTIVE);
>> if (dev == NULL)
>> goto cleanup;
> looks like it's worth introducing driver var here
>
>>
>> @@ -1162,7 +1225,7 @@ static int vzDomainDetachDeviceFlags(virDomainPtr dom, const char *xml,
>> }
>> break;
>> case VIR_DOMAIN_DEVICE_NET:
>> - ret = prlsdkDetachNet(privconn, privdom, dev->data.net);
>> + ret = prlsdkDetachNet(privconn->driver, privdom, dev->data.net);
>> if (ret) {
>> virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
>> _("network detach failed"));
>> @@ -1451,7 +1514,6 @@ vzConnectRegisterCloseCallback(virConnectPtr conn,
>> int ret = -1;
>>
>> vzDriverLock(privconn);
>> -
> unrelated
ok
>
>> if (virConnectCloseCallbackDataGetCallback(privconn->closeCallback) != NULL) {
>> virReportError(VIR_ERR_OPERATION_INVALID, "%s",
>> _("A close callback is already registered"));
>> @@ -1561,6 +1623,48 @@ static virConnectDriver vzConnectDriver = {
>> .hypervisorDriver = &vzHypervisorDriver,
>> };
>>
>> +static int
>> +vzStateCleanup(void)
>> +{
>> + prlsdkDeinit();
> i think this should go after unreferencing driver which in turn
> destroy driver object and call some sdk cleanup logic
indeed
>> + virObjectUnref(vz_driver);
>> + vz_driver = NULL;
>> + virMutexDestroy(&vz_driver_lock);
>> + return 0;
>> +}
>> +
>> +static int
>> +vzStateInitialize(bool privileged ATTRIBUTE_UNUSED,
>> + virStateInhibitCallback callback ATTRIBUTE_UNUSED,
>> + void *opaque ATTRIBUTE_UNUSED)
>> +{
>> + if (!privileged) {
>> + VIR_INFO("Not running privileged, disabling driver");
>> + return 0;
>> + }
> why is this success?
just not to prevent daemon from starting
>
>> +
>> + if (prlsdkInit() < 0) {
>> + VIR_DEBUG("%s", _("Can't initialize Parallels SDK"));
> look like you need to report error here
I just followed the rule other state drivers stick to
>
>> + return -1;
>> + }
>> +
>> + if (virMutexInit(&vz_driver_lock) < 0)
> and here
the same
>
>> + goto error;
>> +
>> + vz_driver = vzDriverObjNew();
> looks like it is not a problem if we get NULL as we are lazy,
> i think this should be commented
ok
>> + return 0;
>> +
>> + error:
>> + vzStateCleanup();
>> + return -1;
>> +}
>> +
>> +static virStateDriver vzStateDriver = {
>> + .name = "vz",
>> + .stateInitialize = vzStateInitialize,
>> + .stateCleanup = vzStateCleanup,
>> +};
>> +
>> /* Parallels domain type backward compatibility*/
>> static virHypervisorDriver parallelsHypervisorDriver;
>> static virConnectDriver parallelsConnectDriver;
>> @@ -1594,5 +1698,8 @@ vzRegister(void)
>> if (virRegisterConnectDriver(&vzConnectDriver, false) < 0)
>> return -1;
>>
>> + if (virRegisterStateDriver(&vzStateDriver) < 0)
>> + return -1;
>> +
>> return 0;
>> }
>> diff --git a/src/vz/vz_sdk.c b/src/vz/vz_sdk.c
>> index c006517..9e369ce 100644
>> --- a/src/vz/vz_sdk.c
>> +++ b/src/vz/vz_sdk.c
>> @@ -234,22 +234,22 @@ prlsdkDeinit(void)
>> };
>>
>> int
>> -prlsdkConnect(vzConnPtr privconn)
>> +prlsdkConnect(vzDriverPtr driver)
>> {
>> PRL_RESULT ret;
>> PRL_HANDLE job = PRL_INVALID_HANDLE;
>>
>> - ret = PrlSrv_Create(&privconn->server);
>> + ret = PrlSrv_Create(&driver->server);
>> if (PRL_FAILED(ret)) {
>> logPrlError(ret);
>> return -1;
>> }
>>
>> - job = PrlSrv_LoginLocalEx(privconn->server, NULL, 0,
>> + job = PrlSrv_LoginLocalEx(driver->server, NULL, 0,
>> PSL_HIGH_SECURITY, PACF_NON_INTERACTIVE_MODE);
>>
>> if (waitJob(job)) {
>> - PrlHandle_Free(privconn->server);
>> + PrlHandle_Free(driver->server);
>> return -1;
>> }
>>
>> @@ -257,18 +257,18 @@ prlsdkConnect(vzConnPtr privconn)
>> }
>>
>> void
>> -prlsdkDisconnect(vzConnPtr privconn)
>> +prlsdkDisconnect(vzDriverPtr driver)
>> {
>> PRL_HANDLE job;
>>
>> - job = PrlSrv_Logoff(privconn->server);
>> + job = PrlSrv_Logoff(driver->server);
>> waitJob(job);
>>
>> - PrlHandle_Free(privconn->server);
>> + PrlHandle_Free(driver->server);
>> }
>>
>> static int
>> -prlsdkSdkDomainLookup(vzConnPtr privconn,
>> +prlsdkSdkDomainLookup(vzDriverPtr driver,
>> const char *id,
>> unsigned int flags,
>> PRL_HANDLE *sdkdom)
>> @@ -278,7 +278,7 @@ prlsdkSdkDomainLookup(vzConnPtr privconn,
>> PRL_RESULT pret = PRL_ERR_UNINITIALIZED;
>> int ret = -1;
>>
>> - job = PrlSrv_GetVmConfig(privconn->server, id, flags);
>> + job = PrlSrv_GetVmConfig(driver->server, id, flags);
>> if (PRL_FAILED(getJobResult(job, &result)))
>> goto cleanup;
>>
>> @@ -303,14 +303,14 @@ prlsdkUUIDFormat(const unsigned char *uuid, char *uuidstr)
>> }
>>
>> static PRL_HANDLE
>> -prlsdkSdkDomainLookupByUUID(vzConnPtr privconn, const unsigned char *uuid)
>> +prlsdkSdkDomainLookupByUUID(vzDriverPtr driver, const unsigned char *uuid)
>> {
>> char uuidstr[VIR_UUID_STRING_BUFLEN + 2];
>> PRL_HANDLE sdkdom = PRL_INVALID_HANDLE;
>>
>> prlsdkUUIDFormat(uuid, uuidstr);
>>
>> - if (prlsdkSdkDomainLookup(privconn, uuidstr,
>> + if (prlsdkSdkDomainLookup(driver, uuidstr,
>> PGVC_SEARCH_BY_UUID, &sdkdom) < 0) {
>> virUUIDFormat(uuid, uuidstr);
>> virReportError(VIR_ERR_NO_DOMAIN,
>> @@ -466,7 +466,7 @@ prlsdkAddDomainVideoInfo(PRL_HANDLE sdkdom, virDomainDefPtr def)
>> }
>>
>> static int
>> -prlsdkGetDiskInfo(vzConnPtr privconn,
>> +prlsdkGetDiskInfo(vzDriverPtr driver,
>> PRL_HANDLE prldisk,
>> virDomainDiskDefPtr disk,
>> bool isCdrom,
>> @@ -489,9 +489,9 @@ prlsdkGetDiskInfo(vzConnPtr privconn,
>> virDomainDiskSetFormat(disk, VIR_STORAGE_FILE_RAW);
>> } else {
>> if (isCt)
>> - virDomainDiskSetFormat(disk, privconn->vzCaps.ctDiskFormat);
>> + virDomainDiskSetFormat(disk, driver->vzCaps.ctDiskFormat);
>> else
>> - virDomainDiskSetFormat(disk, privconn->vzCaps.vmDiskFormat);
>> + virDomainDiskSetFormat(disk, driver->vzCaps.vmDiskFormat);
>> }
>> } else {
>> virDomainDiskSetType(disk, VIR_STORAGE_TYPE_BLOCK);
>> @@ -620,7 +620,7 @@ prlsdkGetFSInfo(PRL_HANDLE prldisk,
>> }
>>
>> static int
>> -prlsdkAddDomainHardDisksInfo(vzConnPtr privconn, PRL_HANDLE sdkdom, virDomainDefPtr def)
>> +prlsdkAddDomainHardDisksInfo(vzDriverPtr driver, PRL_HANDLE sdkdom, virDomainDefPtr def)
>> {
>> PRL_RESULT pret;
>> PRL_UINT32 hddCount;
>> @@ -660,7 +660,7 @@ prlsdkAddDomainHardDisksInfo(vzConnPtr privconn, PRL_HANDLE sdkdom, virDomainDef
>> if (!(disk = virDomainDiskDefNew(NULL)))
>> goto error;
>>
>> - if (prlsdkGetDiskInfo(privconn, hdd, disk, false, IS_CT(def)) < 0)
>> + if (prlsdkGetDiskInfo(driver, hdd, disk, false, IS_CT(def)) < 0)
>> goto error;
>>
>> if (virDomainDiskInsert(def, disk) < 0)
>> @@ -682,7 +682,7 @@ prlsdkAddDomainHardDisksInfo(vzConnPtr privconn, PRL_HANDLE sdkdom, virDomainDef
>> }
>>
>> static int
>> -prlsdkAddDomainOpticalDisksInfo(vzConnPtr privconn, PRL_HANDLE sdkdom, virDomainDefPtr def)
>> +prlsdkAddDomainOpticalDisksInfo(vzDriverPtr driver, PRL_HANDLE sdkdom, virDomainDefPtr def)
>> {
>> PRL_RESULT pret;
>> PRL_UINT32 cdromsCount;
>> @@ -700,7 +700,7 @@ prlsdkAddDomainOpticalDisksInfo(vzConnPtr privconn, PRL_HANDLE sdkdom, virDomain
>> if (!(disk = virDomainDiskDefNew(NULL)))
>> goto error;
>>
>> - if (prlsdkGetDiskInfo(privconn, cdrom, disk, true, IS_CT(def)) < 0)
>> + if (prlsdkGetDiskInfo(driver, cdrom, disk, true, IS_CT(def)) < 0)
>> goto error;
>>
>> PrlHandle_Free(cdrom);
>> @@ -963,16 +963,16 @@ prlsdkAddSerialInfo(PRL_HANDLE sdkdom,
>>
>>
>> static int
>> -prlsdkAddDomainHardware(vzConnPtr privconn, PRL_HANDLE sdkdom, virDomainDefPtr def)
>> +prlsdkAddDomainHardware(vzDriverPtr driver, PRL_HANDLE sdkdom, virDomainDefPtr def)
>> {
>> if (!IS_CT(def))
>> if (prlsdkAddDomainVideoInfo(sdkdom, def) < 0)
>> goto error;
>>
>> - if (prlsdkAddDomainHardDisksInfo(privconn, sdkdom, def) < 0)
>> + if (prlsdkAddDomainHardDisksInfo(driver, sdkdom, def) < 0)
>> goto error;
>>
>> - if (prlsdkAddDomainOpticalDisksInfo(privconn, sdkdom, def) < 0)
>> + if (prlsdkAddDomainOpticalDisksInfo(driver, sdkdom, def) < 0)
>> goto error;
>>
>> if (prlsdkAddDomainNetInfo(sdkdom, def) < 0)
>> @@ -1250,7 +1250,7 @@ prlsdkConvertCpuMode(PRL_HANDLE sdkdom, virDomainDefPtr def)
>> }
>>
>> static virDomainObjPtr
>> -prlsdkNewDomainByHandle(vzConnPtr privconn, PRL_HANDLE sdkdom)
>> +prlsdkNewDomainByHandle(vzDriverPtr driver, PRL_HANDLE sdkdom)
>> {
>> virDomainObjPtr dom = NULL;
>> unsigned char uuid[VIR_UUID_BUFLEN];
>> @@ -1259,16 +1259,18 @@ prlsdkNewDomainByHandle(vzConnPtr privconn, PRL_HANDLE sdkdom)
>> if (prlsdkGetDomainIds(sdkdom, &name, uuid) < 0)
>> goto cleanup;
>>
>> - if (!(dom = vzNewDomain(privconn, name, uuid)))
>> + virObjectLock(driver);
> if you need to introduce lock here i think you need extra patch with explanations
ok
>
>> + if (!(dom = vzNewDomain(driver, name, uuid)))
>> goto cleanup;
>>
>> - if (prlsdkLoadDomain(privconn, dom) < 0) {
>> - virDomainObjListRemove(privconn->domains, dom);
>> + if (prlsdkLoadDomain(driver, dom) < 0) {
>> + virDomainObjListRemove(driver->domains, dom);
>> dom = NULL;
>> goto cleanup;
>> }
>>
>> cleanup:
>> + virObjectUnlock(driver);
>> VIR_FREE(name);
>> return dom;
>> }
>> @@ -1509,7 +1511,7 @@ prlsdkConvertBootOrder(PRL_HANDLE sdkdom, virDomainDefPtr def)
>> }
>>
>> int
>> -prlsdkLoadDomain(vzConnPtr privconn, virDomainObjPtr dom)
>> +prlsdkLoadDomain(vzDriverPtr driver, virDomainObjPtr dom)
>> {
>> virDomainDefPtr def = NULL;
>> vzDomObjPtr pdom = NULL;
>> @@ -1523,11 +1525,10 @@ prlsdkLoadDomain(vzConnPtr privconn, virDomainObjPtr dom)
>> PRL_VM_AUTOSTART_OPTION autostart;
>> PRL_HANDLE sdkdom = PRL_INVALID_HANDLE;
>>
>> - virCheckNonNullArgGoto(privconn, error);
>> virCheckNonNullArgGoto(dom, error);
>>
>> pdom = dom->privateData;
>> - sdkdom = prlsdkSdkDomainLookupByUUID(privconn, dom->def->uuid);
>> + sdkdom = prlsdkSdkDomainLookupByUUID(driver, dom->def->uuid);
>> if (sdkdom == PRL_INVALID_HANDLE)
>> return -1;
>>
>> @@ -1560,7 +1561,7 @@ prlsdkLoadDomain(vzConnPtr privconn, virDomainObjPtr dom)
>> if (prlsdkConvertDomainType(sdkdom, def) < 0)
>> goto error;
>>
>> - if (prlsdkAddDomainHardware(privconn, sdkdom, def) < 0)
>> + if (prlsdkAddDomainHardware(driver, sdkdom, def) < 0)
>> goto error;
>>
>> /* depends on prlsdkAddDomainHardware */
>> @@ -1652,7 +1653,7 @@ prlsdkLoadDomain(vzConnPtr privconn, virDomainObjPtr dom)
>> }
>>
>> int
>> -prlsdkLoadDomains(vzConnPtr privconn)
>> +prlsdkLoadDomains(vzDriverPtr driver)
>> {
>> PRL_HANDLE job = PRL_INVALID_HANDLE;
>> PRL_HANDLE result;
>> @@ -1662,7 +1663,7 @@ prlsdkLoadDomains(vzConnPtr privconn)
>> size_t i = 0;
>> virDomainObjPtr dom;
>>
>> - job = PrlSrv_GetVmListEx(privconn->server, PVTF_VM | PVTF_CT);
>> + job = PrlSrv_GetVmListEx(driver->server, PVTF_VM | PVTF_CT);
>>
>> if (PRL_FAILED(getJobResult(job, &result)))
>> return -1;
>> @@ -1674,8 +1675,8 @@ prlsdkLoadDomains(vzConnPtr privconn)
>> pret = PrlResult_GetParamByIndex(result, i, &sdkdom);
>> prlsdkCheckRetGoto(pret, error);
>>
>> - if (!(dom = prlsdkNewDomainByHandle(privconn, sdkdom)))
>> - goto error;
>> + if (!(dom = prlsdkNewDomainByHandle(driver, sdkdom)))
>> + continue;
>>
>> virObjectUnlock(dom);
>> PrlHandle_Free(sdkdom);
>> @@ -1692,7 +1693,7 @@ prlsdkLoadDomains(vzConnPtr privconn)
>> }
>>
>> int
>> -prlsdkUpdateDomain(vzConnPtr privconn, virDomainObjPtr dom)
>> +prlsdkUpdateDomain(vzDriverPtr driver, virDomainObjPtr dom)
>> {
>> PRL_HANDLE job;
>> vzDomObjPtr pdom = dom->privateData;
>> @@ -1701,10 +1702,10 @@ prlsdkUpdateDomain(vzConnPtr privconn, virDomainObjPtr dom)
>> if (waitJob(job))
>> return -1;
>>
>> - return prlsdkLoadDomain(privconn, dom);
>> + return prlsdkLoadDomain(driver, dom);
>> }
>>
>> -static int prlsdkSendEvent(vzConnPtr privconn,
>> +static int prlsdkSendEvent(vzDriverPtr driver,
>> virDomainObjPtr dom,
>> virDomainEventType lvEventType,
>> int lvEventTypeDetails)
>> @@ -1717,7 +1718,7 @@ static int prlsdkSendEvent(vzConnPtr privconn,
>> if (!event)
>> return -1;
>>
>> - virObjectEventStateQueue(privconn->domainEventState, event);
>> + virObjectEventStateQueue(driver->domainEventState, event);
>> return 0;
>> }
>>
>> @@ -1755,7 +1756,7 @@ prlsdkNewStateToEvent(VIRTUAL_MACHINE_STATE domainState,
>> }
>>
>> static void
>> -prlsdkHandleVmStateEvent(vzConnPtr privconn,
>> +prlsdkHandleVmStateEvent(vzDriverPtr driver,
>> PRL_HANDLE prlEvent,
>> unsigned char *uuid)
>> {
>> @@ -1767,7 +1768,7 @@ prlsdkHandleVmStateEvent(vzConnPtr privconn,
>> virDomainEventType lvEventType = 0;
>> int lvEventTypeDetails = 0;
>>
>> - dom = virDomainObjListFindByUUID(privconn->domains, uuid);
>> + dom = virDomainObjListFindByUUID(driver->domains, uuid);
>> if (dom == NULL)
>> return;
>>
>> @@ -1785,7 +1786,7 @@ prlsdkHandleVmStateEvent(vzConnPtr privconn,
>> &lvEventType,
>> &lvEventTypeDetails);
>>
>> - prlsdkSendEvent(privconn, dom, lvEventType, lvEventTypeDetails);
>> + prlsdkSendEvent(driver, dom, lvEventType, lvEventTypeDetails);
>>
>> cleanup:
>> virObjectUnlock(dom);
>> @@ -1793,19 +1794,19 @@ prlsdkHandleVmStateEvent(vzConnPtr privconn,
>> }
>>
>> static void
>> -prlsdkHandleVmConfigEvent(vzConnPtr privconn,
>> +prlsdkHandleVmConfigEvent(vzDriverPtr driver,
>> unsigned char *uuid)
>> {
>> virDomainObjPtr dom = NULL;
>>
>> - dom = virDomainObjListFindByUUID(privconn->domains, uuid);
>> + dom = virDomainObjListFindByUUID(driver->domains, uuid);
>> if (dom == NULL)
>> return;
>>
>> - if (prlsdkUpdateDomain(privconn, dom) < 0)
>> + if (prlsdkUpdateDomain(driver, dom) < 0)
>> goto cleanup;
>>
>> - prlsdkSendEvent(privconn, dom, VIR_DOMAIN_EVENT_DEFINED,
>> + prlsdkSendEvent(driver, dom, VIR_DOMAIN_EVENT_DEFINED,
>> VIR_DOMAIN_EVENT_DEFINED_UPDATED);
>>
>> cleanup:
>> @@ -1814,23 +1815,23 @@ prlsdkHandleVmConfigEvent(vzConnPtr privconn,
>> }
>>
>> static void
>> -prlsdkHandleVmAddedEvent(vzConnPtr privconn,
>> +prlsdkHandleVmAddedEvent(vzDriverPtr driver,
>> unsigned char *uuid)
>> {
>> virDomainObjPtr dom = NULL;
>> PRL_HANDLE sdkdom = PRL_INVALID_HANDLE;
>>
>> - dom = virDomainObjListFindByUUID(privconn->domains, uuid);
>> + dom = virDomainObjListFindByUUID(driver->domains, uuid);
>> if (!dom) {
>> - sdkdom = prlsdkSdkDomainLookupByUUID(privconn, uuid);
>> + sdkdom = prlsdkSdkDomainLookupByUUID(driver, uuid);
>> if (sdkdom == PRL_INVALID_HANDLE)
>> goto cleanup;
>>
>> - if (!(dom = prlsdkNewDomainByHandle(privconn, sdkdom)))
>> + if (!(dom = prlsdkNewDomainByHandle(driver, sdkdom)))
>> goto cleanup;
>> }
>>
>> - prlsdkSendEvent(privconn, dom, VIR_DOMAIN_EVENT_DEFINED,
>> + prlsdkSendEvent(driver, dom, VIR_DOMAIN_EVENT_DEFINED,
>> VIR_DOMAIN_EVENT_DEFINED_ADDED);
>>
>> cleanup:
>> @@ -1841,28 +1842,28 @@ prlsdkHandleVmAddedEvent(vzConnPtr privconn,
>> }
>>
>> static void
>> -prlsdkHandleVmRemovedEvent(vzConnPtr privconn,
>> +prlsdkHandleVmRemovedEvent(vzDriverPtr driver,
>> unsigned char *uuid)
>> {
>> virDomainObjPtr dom = NULL;
>>
>> - dom = virDomainObjListFindByUUID(privconn->domains, uuid);
>> + dom = virDomainObjListFindByUUID(driver->domains, uuid);
>> /* domain was removed from the list from the libvirt
>> * API function in current connection */
>> if (dom == NULL)
>> return;
>>
>> - prlsdkSendEvent(privconn, dom, VIR_DOMAIN_EVENT_UNDEFINED,
>> + prlsdkSendEvent(driver, dom, VIR_DOMAIN_EVENT_UNDEFINED,
>> VIR_DOMAIN_EVENT_UNDEFINED_REMOVED);
>>
>> - virDomainObjListRemove(privconn->domains, dom);
>> + virDomainObjListRemove(driver->domains, dom);
>> return;
>> }
>>
>> #define PARALLELS_STATISTICS_DROP_COUNT 3
>>
>> static PRL_RESULT
>> -prlsdkHandlePerfEvent(vzConnPtr privconn,
>> +prlsdkHandlePerfEvent(vzDriverPtr driver,
>> PRL_HANDLE event,
>> unsigned char *uuid)
>> {
>> @@ -1870,7 +1871,7 @@ prlsdkHandlePerfEvent(vzConnPtr privconn,
>> vzDomObjPtr privdom = NULL;
>> PRL_HANDLE job = PRL_INVALID_HANDLE;
>>
>> - dom = virDomainObjListFindByUUID(privconn->domains, uuid);
>> + dom = virDomainObjListFindByUUID(driver->domains, uuid);
>> if (dom == NULL)
>> goto cleanup;
>> privdom = dom->privateData;
>> @@ -1907,7 +1908,7 @@ prlsdkHandlePerfEvent(vzConnPtr privconn,
>> static PRL_RESULT
>> prlsdkEventsHandler(PRL_HANDLE prlEvent, PRL_VOID_PTR opaque)
>> {
>> - vzConnPtr privconn = opaque;
>> + vzDriverPtr driver = opaque;
>> PRL_RESULT pret = PRL_ERR_FAILURE;
>> PRL_HANDLE_TYPE handleType;
>> char uuidstr[VIR_UUID_STRING_BUFLEN + 2];
>> @@ -1922,7 +1923,7 @@ prlsdkEventsHandler(PRL_HANDLE prlEvent, PRL_VOID_PTR opaque)
>> if (handleType != PHT_EVENT)
>> goto cleanup;
>>
>> - if (privconn == NULL)
>> + if (driver == NULL)
>> goto cleanup;
>>
>> pret = PrlEvent_GetIssuerId(prlEvent, uuidstr, &bufsize);
>> @@ -1938,27 +1939,26 @@ prlsdkEventsHandler(PRL_HANDLE prlEvent, PRL_VOID_PTR opaque)
>>
>> switch (prlEventType) {
>> case PET_DSP_EVT_VM_STATE_CHANGED:
>> - prlsdkHandleVmStateEvent(privconn, prlEvent, uuid);
>> + prlsdkHandleVmStateEvent(driver, prlEvent, uuid);
>> break;
>> case PET_DSP_EVT_VM_CONFIG_CHANGED:
>> - prlsdkHandleVmConfigEvent(privconn, uuid);
>> + prlsdkHandleVmConfigEvent(driver, uuid);
>> break;
>> case PET_DSP_EVT_VM_CREATED:
>> case PET_DSP_EVT_VM_ADDED:
>> - prlsdkHandleVmAddedEvent(privconn, uuid);
>> + prlsdkHandleVmAddedEvent(driver, uuid);
>> break;
>> case PET_DSP_EVT_VM_DELETED:
>> case PET_DSP_EVT_VM_UNREGISTERED:
>> - prlsdkHandleVmRemovedEvent(privconn, uuid);
>> + prlsdkHandleVmRemovedEvent(driver, uuid);
>> break;
>> case PET_DSP_EVT_VM_PERFSTATS:
>> - prlsdkHandlePerfEvent(privconn, prlEvent, uuid);
>> + prlsdkHandlePerfEvent(driver, prlEvent, uuid);
>> /* above function takes own of event */
>> prlEvent = PRL_INVALID_HANDLE;
>> break;
>> case PET_DSP_EVT_DISP_CONNECTION_CLOSED:
>> - virConnectCloseCallbackDataCall(privconn->closeCallback,
>> - VIR_CONNECT_CLOSE_REASON_EOF);
>> + vzDestroyDriverConnection();
>> break;
>> default:
>> VIR_DEBUG("Skipping event of type %d", prlEventType);
>> @@ -1969,13 +1969,13 @@ prlsdkEventsHandler(PRL_HANDLE prlEvent, PRL_VOID_PTR opaque)
>> return PRL_ERR_SUCCESS;
>> }
>>
>> -int prlsdkSubscribeToPCSEvents(vzConnPtr privconn)
>> +int prlsdkSubscribeToPCSEvents(vzDriverPtr driver)
>> {
>> PRL_RESULT pret = PRL_ERR_UNINITIALIZED;
>>
>> - pret = PrlSrv_RegEventHandler(privconn->server,
>> + pret = PrlSrv_RegEventHandler(driver->server,
>> prlsdkEventsHandler,
>> - privconn);
>> + driver);
>> prlsdkCheckRetGoto(pret, error);
>> return 0;
>>
>> @@ -1983,12 +1983,12 @@ int prlsdkSubscribeToPCSEvents(vzConnPtr privconn)
>> return -1;
>> }
>>
>> -void prlsdkUnsubscribeFromPCSEvents(vzConnPtr privconn)
>> +void prlsdkUnsubscribeFromPCSEvents(vzDriverPtr driver)
>> {
>> PRL_RESULT ret = PRL_ERR_UNINITIALIZED;
>> - ret = PrlSrv_UnregEventHandler(privconn->server,
>> + ret = PrlSrv_UnregEventHandler(driver->server,
>> prlsdkEventsHandler,
>> - privconn);
>> + driver);
>> if (PRL_FAILED(ret))
>> logPrlError(ret);
>> }
>> @@ -2052,7 +2052,7 @@ PRL_RESULT prlsdkRestart(PRL_HANDLE sdkdom)
>> }
>>
>> int
>> -prlsdkDomainChangeStateLocked(vzConnPtr privconn,
>> +prlsdkDomainChangeStateLocked(vzDriverPtr driver,
>> virDomainObjPtr dom,
>> prlsdkChangeStateFunc chstate)
>> {
>> @@ -2078,7 +2078,7 @@ prlsdkDomainChangeStateLocked(vzConnPtr privconn,
>> return -1;
>> }
>>
>> - return prlsdkUpdateDomain(privconn, dom);
>> + return prlsdkUpdateDomain(driver, dom);
>> }
>>
>> int
>> @@ -2092,7 +2092,7 @@ prlsdkDomainChangeState(virDomainPtr domain,
>> if (!(dom = vzDomObjFromDomain(domain)))
>> return -1;
>>
>> - ret = prlsdkDomainChangeStateLocked(privconn, dom, chstate);
>> + ret = prlsdkDomainChangeStateLocked(privconn->driver, dom, chstate);
>> virObjectUnlock(dom);
>> return ret;
>> }
>> @@ -2850,7 +2850,7 @@ static const char * prlsdkFormatMac(virMacAddrPtr mac, char *macstr)
>> return macstr;
>> }
>>
>> -static int prlsdkAddNet(vzConnPtr privconn,
>> +static int prlsdkAddNet(vzDriverPtr driver,
>> PRL_HANDLE sdkdom,
>> virDomainNetDefPtr net,
>> bool isCt)
>> @@ -3055,7 +3055,7 @@ static int prlsdkAddNet(vzConnPtr privconn,
>> pret = PrlVirtNet_SetNetworkType(vnet, PVN_BRIDGED_ETHERNET);
>> prlsdkCheckRetGoto(pret, cleanup);
>>
>> - job = PrlSrv_AddVirtualNetwork(privconn->server,
>> + job = PrlSrv_AddVirtualNetwork(driver->server,
>> vnet,
>> PRL_USE_VNET_NAME_FOR_BRIDGE_NAME);
>> if (PRL_FAILED(pret = waitJob(job)))
>> @@ -3084,7 +3084,7 @@ static int prlsdkAddNet(vzConnPtr privconn,
>> }
>>
>> static void
>> -prlsdkCleanupBridgedNet(vzConnPtr privconn, virDomainNetDefPtr net)
>> +prlsdkCleanupBridgedNet(vzDriverPtr driver, virDomainNetDefPtr net)
>> {
>> PRL_RESULT pret;
>> PRL_HANDLE vnet = PRL_INVALID_HANDLE;
>> @@ -3099,7 +3099,7 @@ prlsdkCleanupBridgedNet(vzConnPtr privconn, virDomainNetDefPtr net)
>> pret = PrlVirtNet_SetNetworkId(vnet, net->data.network.name);
>> prlsdkCheckRetGoto(pret, cleanup);
>>
>> - job = PrlSrv_DeleteVirtualNetwork(privconn->server, vnet, 0);
>> + job = PrlSrv_DeleteVirtualNetwork(driver->server, vnet, 0);
>> if (PRL_FAILED(pret = waitJob(job)))
>> goto cleanup;
>>
>> @@ -3107,7 +3107,7 @@ prlsdkCleanupBridgedNet(vzConnPtr privconn, virDomainNetDefPtr net)
>> PrlHandle_Free(vnet);
>> }
>>
>> -int prlsdkAttachNet(vzConnPtr privconn,
>> +int prlsdkAttachNet(vzDriverPtr driver,
>> virDomainObjPtr dom,
>> virDomainNetDefPtr net)
>> {
>> @@ -3125,7 +3125,7 @@ int prlsdkAttachNet(vzConnPtr privconn,
>> if (PRL_FAILED(waitJob(job)))
>> return ret;
>>
>> - ret = prlsdkAddNet(privconn, privdom->sdkdom, net, IS_CT(dom->def));
>> + ret = prlsdkAddNet(driver, privdom->sdkdom, net, IS_CT(dom->def));
>> if (ret == 0) {
>> job = PrlVm_CommitEx(privdom->sdkdom, PVCF_DETACH_HDD_BUNDLE);
>> if (PRL_FAILED(waitJob(job)))
>> @@ -3172,7 +3172,7 @@ prlsdkFindNetByMAC(PRL_HANDLE sdkdom, virMacAddrPtr mac)
>> return adapter;
>> }
>>
>> -int prlsdkDetachNet(vzConnPtr privconn,
>> +int prlsdkDetachNet(vzDriverPtr driver,
>> virDomainObjPtr dom,
>> virDomainNetDefPtr net)
>> {
>> @@ -3196,7 +3196,7 @@ int prlsdkDetachNet(vzConnPtr privconn,
>> if (sdknet == PRL_INVALID_HANDLE)
>> goto cleanup;
>>
>> - prlsdkCleanupBridgedNet(privconn, net);
>> + prlsdkCleanupBridgedNet(driver, net);
>>
>> pret = PrlVmDev_Remove(sdknet);
>> prlsdkCheckRetGoto(pret, cleanup);
>> @@ -3231,7 +3231,7 @@ static int prlsdkDelDisk(PRL_HANDLE sdkdom, int idx)
>> return ret;
>> }
>>
>> -static int prlsdkAddDisk(vzConnPtr privconn,
>> +static int prlsdkAddDisk(vzDriverPtr driver,
>> PRL_HANDLE sdkdom,
>> virDomainDiskDefPtr disk)
>> {
>> @@ -3342,7 +3342,7 @@ static int prlsdkAddDisk(vzConnPtr privconn,
>> }
>>
>> if (disk->bus == VIR_DOMAIN_DISK_BUS_SCSI) {
>> - if (vzGetDefaultSCSIModel(privconn, &scsiModel) < 0)
>> + if (vzGetDefaultSCSIModel(driver, &scsiModel) < 0)
>> goto cleanup;
>> pret = PrlVmDev_SetSubType(sdkdisk, scsiModel);
>> prlsdkCheckRetGoto(pret, cleanup);
>> @@ -3380,7 +3380,7 @@ static int prlsdkAddDisk(vzConnPtr privconn,
>> }
>>
>> int
>> -prlsdkAttachVolume(vzConnPtr privconn,
>> +prlsdkAttachVolume(vzDriverPtr driver,
>> virDomainObjPtr dom,
>> virDomainDiskDefPtr disk)
>> {
>> @@ -3392,7 +3392,7 @@ prlsdkAttachVolume(vzConnPtr privconn,
>> if (PRL_FAILED(waitJob(job)))
>> goto cleanup;
>>
>> - ret = prlsdkAddDisk(privconn, privdom->sdkdom, disk);
>> + ret = prlsdkAddDisk(driver, privdom->sdkdom, disk);
>> if (ret == 0) {
>> job = PrlVm_CommitEx(privdom->sdkdom, PVCF_DETACH_HDD_BUNDLE);
>> if (PRL_FAILED(waitJob(job))) {
>> @@ -3594,7 +3594,7 @@ prlsdkSetBootOrderVm(PRL_HANDLE sdkdom, virDomainDefPtr def)
>> }
>>
>> static int
>> -prlsdkDoApplyConfig(virConnectPtr conn,
>> +prlsdkDoApplyConfig(vzDriverPtr driver,
>> PRL_HANDLE sdkdom,
>> virDomainDefPtr def,
>> virDomainDefPtr olddef)
>> @@ -3660,11 +3660,11 @@ prlsdkDoApplyConfig(virConnectPtr conn,
>>
>> if (olddef) {
>> for (i = 0; i < olddef->nnets; i++)
>> - prlsdkCleanupBridgedNet(conn->privateData, olddef->nets[i]);
>> + prlsdkCleanupBridgedNet(driver, olddef->nets[i]);
>> }
>>
>> for (i = 0; i < def->nnets; i++) {
>> - if (prlsdkAddNet(conn->privateData, sdkdom, def->nets[i], IS_CT(def)) < 0)
>> + if (prlsdkAddNet(driver, sdkdom, def->nets[i], IS_CT(def)) < 0)
>> goto error;
>> }
>>
>> @@ -3685,7 +3685,7 @@ prlsdkDoApplyConfig(virConnectPtr conn,
>> }
>>
>> for (i = 0; i < def->ndisks; i++) {
>> - if (prlsdkAddDisk(conn->privateData, sdkdom, def->disks[i]) < 0)
>> + if (prlsdkAddDisk(driver, sdkdom, def->disks[i]) < 0)
>> goto error;
>> }
>>
>> @@ -3703,22 +3703,21 @@ prlsdkDoApplyConfig(virConnectPtr conn,
>> VIR_FREE(mask);
>>
>> for (i = 0; i < def->nnets; i++)
>> - prlsdkCleanupBridgedNet(conn->privateData, def->nets[i]);
>> + prlsdkCleanupBridgedNet(driver, def->nets[i]);
>>
>> return -1;
>> }
>>
>> int
>> -prlsdkApplyConfig(virConnectPtr conn,
>> +prlsdkApplyConfig(vzDriverPtr driver,
>> virDomainObjPtr dom,
>> virDomainDefPtr new)
>> {
>> - vzConnPtr privconn = conn->privateData;
>> PRL_HANDLE sdkdom = PRL_INVALID_HANDLE;
>> PRL_HANDLE job = PRL_INVALID_HANDLE;
>> int ret;
>>
>> - sdkdom = prlsdkSdkDomainLookupByUUID(privconn, dom->def->uuid);
>> + sdkdom = prlsdkSdkDomainLookupByUUID(driver, dom->def->uuid);
>> if (sdkdom == PRL_INVALID_HANDLE)
>> return -1;
>>
>> @@ -3726,7 +3725,7 @@ prlsdkApplyConfig(virConnectPtr conn,
>> if (PRL_FAILED(waitJob(job)))
>> return -1;
>>
>> - ret = prlsdkDoApplyConfig(conn, sdkdom, new, dom->def);
>> + ret = prlsdkDoApplyConfig(driver, sdkdom, new, dom->def);
>>
>> if (ret == 0) {
>> job = PrlVm_CommitEx(sdkdom, PVCF_DETACH_HDD_BUNDLE);
>> @@ -3740,9 +3739,8 @@ prlsdkApplyConfig(virConnectPtr conn,
>> }
>>
>> int
>> -prlsdkCreateVm(virConnectPtr conn, virDomainDefPtr def)
>> +prlsdkCreateVm(vzDriverPtr driver, virDomainDefPtr def)
>> {
>> - vzConnPtr privconn = conn->privateData;
>> PRL_HANDLE sdkdom = PRL_INVALID_HANDLE;
>> PRL_HANDLE job = PRL_INVALID_HANDLE;
>> PRL_HANDLE result = PRL_INVALID_HANDLE;
>> @@ -3750,10 +3748,10 @@ prlsdkCreateVm(virConnectPtr conn, virDomainDefPtr def)
>> PRL_RESULT pret;
>> int ret = -1;
>>
>> - pret = PrlSrv_CreateVm(privconn->server, &sdkdom);
>> + pret = PrlSrv_CreateVm(driver->server, &sdkdom);
>> prlsdkCheckRetGoto(pret, cleanup);
>>
>> - job = PrlSrv_GetSrvConfig(privconn->server);
>> + job = PrlSrv_GetSrvConfig(driver->server);
>> if (PRL_FAILED(getJobResult(job, &result)))
>> goto cleanup;
>>
>> @@ -3766,7 +3764,7 @@ prlsdkCreateVm(virConnectPtr conn, virDomainDefPtr def)
>> pret = PrlVmCfg_SetOfflineManagementEnabled(sdkdom, 0);
>> prlsdkCheckRetGoto(pret, cleanup);
>>
>> - ret = prlsdkDoApplyConfig(conn, sdkdom, def, NULL);
>> + ret = prlsdkDoApplyConfig(driver, sdkdom, def, NULL);
>> if (ret)
>> goto cleanup;
>>
>> @@ -3780,9 +3778,8 @@ prlsdkCreateVm(virConnectPtr conn, virDomainDefPtr def)
>> }
>>
>> int
>> -prlsdkCreateCt(virConnectPtr conn, virDomainDefPtr def)
>> +prlsdkCreateCt(vzDriverPtr driver, virDomainDefPtr def)
>> {
>> - vzConnPtr privconn = conn->privateData;
>> PRL_HANDLE sdkdom = PRL_INVALID_HANDLE;
>> PRL_GET_VM_CONFIG_PARAM_DATA confParam;
>> PRL_HANDLE job = PRL_INVALID_HANDLE;
>> @@ -3815,7 +3812,7 @@ prlsdkCreateCt(virConnectPtr conn, virDomainDefPtr def)
>> confParam.sConfigSample = "vswap.1024MB";
>> confParam.nOsVersion = 0;
>>
>> - job = PrlSrv_GetDefaultVmConfig(privconn->server, &confParam, 0);
>> + job = PrlSrv_GetDefaultVmConfig(driver->server, &confParam, 0);
>> if (PRL_FAILED(getJobResult(job, &result)))
>> goto cleanup;
>>
>> @@ -3828,7 +3825,7 @@ prlsdkCreateCt(virConnectPtr conn, virDomainDefPtr def)
>>
>> }
>>
>> - ret = prlsdkDoApplyConfig(conn, sdkdom, def, NULL);
>> + ret = prlsdkDoApplyConfig(driver, sdkdom, def, NULL);
>> if (ret)
>> goto cleanup;
>>
>> @@ -3947,7 +3944,7 @@ prlsdkDomainHasSnapshots(PRL_HANDLE sdkdom, int* found)
>> }
>>
>> int
>> -prlsdkUnregisterDomain(vzConnPtr privconn, virDomainObjPtr dom, unsigned int flags)
>> +prlsdkUnregisterDomain(vzDriverPtr driver, virDomainObjPtr dom, unsigned int flags)
>> {
>> vzDomObjPtr privdom = dom->privateData;
>> PRL_HANDLE job;
>> @@ -3984,13 +3981,13 @@ prlsdkUnregisterDomain(vzConnPtr privconn, virDomainObjPtr dom, unsigned int fla
>> return -1;
>>
>> for (i = 0; i < dom->def->nnets; i++)
>> - prlsdkCleanupBridgedNet(privconn, dom->def->nets[i]);
>> + prlsdkCleanupBridgedNet(driver, dom->def->nets[i]);
>>
>> - if (prlsdkSendEvent(privconn, dom, VIR_DOMAIN_EVENT_UNDEFINED,
>> + if (prlsdkSendEvent(driver, dom, VIR_DOMAIN_EVENT_UNDEFINED,
>> VIR_DOMAIN_EVENT_UNDEFINED_REMOVED) < 0)
>> return -1;
>>
>> - virDomainObjListRemove(privconn->domains, dom);
>> + virDomainObjListRemove(driver->domains, dom);
>> return 0;
>> }
>>
>> diff --git a/src/vz/vz_sdk.h b/src/vz/vz_sdk.h
>> index 2f11d4f..f197832 100644
>> --- a/src/vz/vz_sdk.h
>> +++ b/src/vz/vz_sdk.h
>> @@ -26,16 +26,16 @@
>>
>> int prlsdkInit(void);
>> void prlsdkDeinit(void);
>> -int prlsdkConnect(vzConnPtr privconn);
>> -void prlsdkDisconnect(vzConnPtr privconn);
>> +int prlsdkConnect(vzDriverPtr driver);
>> +void prlsdkDisconnect(vzDriverPtr driver);
>> int
>> -prlsdkLoadDomains(vzConnPtr privconn);
>> -int prlsdkUpdateDomain(vzConnPtr privconn, virDomainObjPtr dom);
>> +prlsdkLoadDomains(vzDriverPtr driver);
>> +int prlsdkUpdateDomain(vzDriverPtr driver, virDomainObjPtr dom);
>> int
>> -prlsdkLoadDomain(vzConnPtr privconn,
>> +prlsdkLoadDomain(vzDriverPtr driver,
>> virDomainObjPtr dom);
>> -int prlsdkSubscribeToPCSEvents(vzConnPtr privconn);
>> -void prlsdkUnsubscribeFromPCSEvents(vzConnPtr privconn);
>> +int prlsdkSubscribeToPCSEvents(vzDriverPtr driver);
>> +void prlsdkUnsubscribeFromPCSEvents(vzDriverPtr driver);
>> PRL_RESULT prlsdkStart(PRL_HANDLE sdkdom);
>> PRL_RESULT prlsdkKill(PRL_HANDLE sdkdom);
>> PRL_RESULT prlsdkStop(PRL_HANDLE sdkdom);
>> @@ -49,29 +49,29 @@ int
>> prlsdkDomainChangeState(virDomainPtr domain,
>> prlsdkChangeStateFunc chstate);
>> int
>> -prlsdkDomainChangeStateLocked(vzConnPtr privconn,
>> +prlsdkDomainChangeStateLocked(vzDriverPtr driver,
>> virDomainObjPtr dom,
>> prlsdkChangeStateFunc chstate);
>> int
>> -prlsdkApplyConfig(virConnectPtr conn,
>> +prlsdkApplyConfig(vzDriverPtr driver,
>> virDomainObjPtr dom,
>> virDomainDefPtr new);
>> -int prlsdkCreateVm(virConnectPtr conn, virDomainDefPtr def);
>> -int prlsdkCreateCt(virConnectPtr conn, virDomainDefPtr def);
>> +int prlsdkCreateVm(vzDriverPtr driver, virDomainDefPtr def);
>> +int prlsdkCreateCt(vzDriverPtr driver, virDomainDefPtr def);
>> int
>> -prlsdkUnregisterDomain(vzConnPtr privconn, virDomainObjPtr dom, unsigned int flags);
>> +prlsdkUnregisterDomain(vzDriverPtr driver, virDomainObjPtr dom, unsigned int flags);
>> int
>> prlsdkDomainManagedSaveRemove(virDomainObjPtr dom);
>> int
>> -prlsdkAttachVolume(vzConnPtr privconn, virDomainObjPtr dom, virDomainDiskDefPtr disk);
>> +prlsdkAttachVolume(vzDriverPtr driver, virDomainObjPtr dom, virDomainDiskDefPtr disk);
>> int
>> prlsdkDetachVolume(virDomainObjPtr dom, virDomainDiskDefPtr disk);
>> int
>> prlsdkGetBlockStats(virDomainObjPtr dom, virDomainDiskDefPtr disk, virDomainBlockStatsPtr stats);
>> int
>> -prlsdkAttachNet(vzConnPtr privconn, virDomainObjPtr dom, virDomainNetDefPtr net);
>> +prlsdkAttachNet(vzDriverPtr driver, virDomainObjPtr dom, virDomainNetDefPtr net);
>> int
>> -prlsdkDetachNet(vzConnPtr privconn, virDomainObjPtr dom, virDomainNetDefPtr net);
>> +prlsdkDetachNet(vzDriverPtr driver, virDomainObjPtr dom, virDomainNetDefPtr net);
>> int
>> prlsdkGetNetStats(virDomainObjPtr dom, const char *path, virDomainInterfaceStatsPtr stats);
>> int
>> diff --git a/src/vz/vz_utils.c b/src/vz/vz_utils.c
>> index 64e469c..6e28f20 100644
>> --- a/src/vz/vz_utils.c
>> +++ b/src/vz/vz_utils.c
>> @@ -73,8 +73,9 @@ vzDomObjFromDomain(virDomainPtr domain)
>> virDomainObjPtr vm;
>> vzConnPtr privconn = domain->conn->privateData;
>> char uuidstr[VIR_UUID_STRING_BUFLEN];
>> + vzDriverPtr driver = privconn->driver;
>>
>> - vm = virDomainObjListFindByUUID(privconn->domains, domain->uuid);
>> + vm = virDomainObjListFindByUUID(driver->domains, domain->uuid);
>> if (!vm) {
>> virUUIDFormat(domain->uuid, uuidstr);
>> virReportError(VIR_ERR_NO_DOMAIN,
>> @@ -84,7 +85,6 @@ vzDomObjFromDomain(virDomainPtr domain)
>> }
>>
>> return vm;
>> -
>> }
>>
>> /**
>> @@ -103,8 +103,9 @@ vzDomObjFromDomainRef(virDomainPtr domain)
>> virDomainObjPtr vm;
>> vzConnPtr privconn = domain->conn->privateData;
>> char uuidstr[VIR_UUID_STRING_BUFLEN];
>> + vzDriverPtr driver = privconn->driver;
>>
>> - vm = virDomainObjListFindByUUIDRef(privconn->domains, domain->uuid);
>> + vm = virDomainObjListFindByUUIDRef(driver->domains, domain->uuid);
>> if (!vm) {
>> virUUIDFormat(domain->uuid, uuidstr);
>> virReportError(VIR_ERR_NO_DOMAIN,
>> @@ -159,7 +160,7 @@ vzGetOutput(const char *binary, ...)
>> }
>>
>> virDomainObjPtr
>> -vzNewDomain(vzConnPtr privconn, char *name, const unsigned char *uuid)
>> +vzNewDomain(vzDriverPtr driver, char *name, const unsigned char *uuid)
>> {
>> virDomainDefPtr def = NULL;
>> virDomainObjPtr dom = NULL;
>> @@ -180,8 +181,8 @@ vzNewDomain(vzConnPtr privconn, char *name, const unsigned char *uuid)
>>
>> def->virtType = VIR_DOMAIN_VIRT_VZ;
>>
>> - if (!(dom = virDomainObjListAdd(privconn->domains, def,
>> - privconn->xmlopt,
>> + if (!(dom = virDomainObjListAdd(driver->domains, def,
>> + driver->xmlopt,
>> 0, NULL)))
>> goto error;
>>
>> @@ -199,7 +200,7 @@ vzNewDomain(vzConnPtr privconn, char *name, const unsigned char *uuid)
>> }
>>
>> static void
>> -vzInitCaps(unsigned long vzVersion, vzCapabilities *vzCaps)
>> +vzInitCaps(unsigned long vzVersion, vzCapabilitiesPtr vzCaps)
>> {
>> if (vzVersion < VIRTUOZZO_VER_7) {
>> vzCaps->ctDiskFormat = VIR_STORAGE_FILE_PLOOP;
>> @@ -217,7 +218,7 @@ vzInitCaps(unsigned long vzVersion, vzCapabilities *vzCaps)
>> }
>>
>> int
>> -vzInitVersion(vzConnPtr privconn)
>> +vzInitVersion(vzDriverPtr driver)
>> {
>> char *output, *sVer, *tmp;
>> const char *searchStr = "prlsrvctl version ";
>> @@ -250,12 +251,12 @@ vzInitVersion(vzConnPtr privconn)
>> }
>>
>> tmp[0] = '\0';
>> - if (virParseVersionString(sVer, &(privconn->vzVersion), true) < 0) {
>> + if (virParseVersionString(sVer, &(driver->vzVersion), true) < 0) {
>> vzParseError();
>> goto cleanup;
>> }
>>
>> - vzInitCaps(privconn->vzVersion, &privconn->vzCaps);
>> + vzInitCaps(driver->vzVersion, &driver->vzCaps);
>> ret = 0;
>>
>> cleanup:
>> @@ -473,10 +474,10 @@ vzCheckUnsupportedControllers(virDomainDefPtr def, vzCapabilitiesPtr vzCaps)
>> return 0;
>> }
>>
>> -int vzGetDefaultSCSIModel(vzConnPtr privconn,
>> +int vzGetDefaultSCSIModel(vzDriverPtr driver,
>> PRL_CLUSTERED_DEVICE_SUBTYPE *scsiModel)
>> {
>> - switch (privconn->vzCaps.scsiControllerModel) {
>> + switch (driver->vzCaps.scsiControllerModel) {
>> case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_SCSI:
>> *scsiModel = PCD_VIRTIO_SCSI;
>> break;
>> @@ -487,7 +488,7 @@ int vzGetDefaultSCSIModel(vzConnPtr privconn,
>> virReportError(VIR_ERR_INTERNAL_ERROR,
>> _("Unknown SCSI controller model %s"),
>> virDomainControllerModelSCSITypeToString(
>> - privconn->vzCaps.scsiControllerModel));
>> + driver->vzCaps.scsiControllerModel));
>> return -1;
>> }
>> return 0;
>> diff --git a/src/vz/vz_utils.h b/src/vz/vz_utils.h
>> index b415b0f..ce2fd92 100644
>> --- a/src/vz/vz_utils.h
>> +++ b/src/vz/vz_utils.h
>> @@ -60,8 +60,8 @@ struct _vzCapabilities {
>> typedef struct _vzCapabilities vzCapabilities;
>> typedef struct _vzCapabilities *vzCapabilitiesPtr;
>>
>> -struct _vzConn {
>> - virMutex lock;
>> +struct _vzDriver {
>> + virObjectLockable parent;
>>
>> /* Immutable pointer, self-locking APIs */
>> virDomainObjListPtr domains;
>> @@ -76,9 +76,21 @@ struct _vzConn {
>> vzCapabilities vzCaps;
>> };
> you need to remove virConnectCloseCallbackDataPtr field from driver
ok
>>
>> +typedef struct _vzDriver vzDriver;
>> +typedef struct _vzDriver *vzDriverPtr;
>> +
>> +struct _vzConn {
>> + struct _vzConn* next;
>> +
>> + vzDriverPtr driver;
>> + /* Immutable pointer, self-locking APIs */
>> + virConnectCloseCallbackDataPtr closeCallback;
>> +};
>> +
>> typedef struct _vzConn vzConn;
>> typedef struct _vzConn *vzConnPtr;
>>
>> +
>> struct _vzCountersCache {
>> PRL_HANDLE stats;
>> virCond cond;
>> @@ -105,12 +117,19 @@ char * vzGetOutput(const char *binary, ...)
>> ATTRIBUTE_NONNULL(1) ATTRIBUTE_SENTINEL;
>> void vzDriverLock(vzConnPtr driver);
>> void vzDriverUnlock(vzConnPtr driver);
>> +
>> +vzDriverPtr
>> +vzGetDriverConnection(void);
>> +
>> +void
>> +vzDestroyDriverConnection(void);
>> +
>> virDomainObjPtr
>> -vzNewDomain(vzConnPtr privconn,
>> +vzNewDomain(vzDriverPtr driver,
>> char *name,
>> const unsigned char *uuid);
>> int
>> -vzInitVersion(vzConnPtr privconn);
>> +vzInitVersion(vzDriverPtr driver);
>> int
>> vzCheckUnsupportedDisks(virDomainDefPtr def,
>> vzCapabilitiesPtr vzCaps);
>> @@ -118,7 +137,7 @@ int
>> vzCheckUnsupportedControllers(virDomainDefPtr def,
>> vzCapabilitiesPtr vzCaps);
>> int
>> -vzGetDefaultSCSIModel(vzConnPtr privconn,
>> +vzGetDefaultSCSIModel(vzDriverPtr driver,
>> PRL_CLUSTERED_DEVICE_SUBTYPE *scsiModel);
>>
>> # define PARALLELS_BLOCK_STATS_FOREACH(OP) \
>>
More information about the libvir-list
mailing list