[libvirt] [PATCH 2/3] parallels: move up updating autostart parameter in prlsdkLoadDomain

Maxim Nestratov mnestratov at virtuozzo.com
Thu May 21 12:26:07 UTC 2015


21.05.2015 9:55, Dmitry Guryanov пишет:
>
>
> On 05/18/2015 05:44 PM, Maxim Nestratov wrote:
>> It is better to get all necessary parameters and check them on newly
>> created configuration before actually creating a domain with them or
>> applying them to an existing domain.
>
> What problem could it cause?
First of all if we ask something from parallels dispatcher it takes time 
and doing such things with locked domain isn't a good practice. I am not 
saying that PrlVmCfg_GetAutoStart will go to dispatcher but other SDK 
functions will. What I wanted here is to group SDK calls together.
Secondly, there can be a race when we call prlsdkLoadDomain function 
from domain creation event handler after the domain is deleted by 
concurrent extern call. So it's better to fail before we actually create 
a domain.
>>
>> Signed-off-by: Maxim Nestratov <mnestratov at parallels.com>
>> ---
>>   src/parallels/parallels_sdk.c | 18 +++++++++---------
>>   1 file changed, 9 insertions(+), 9 deletions(-)
>>
>> diff --git a/src/parallels/parallels_sdk.c 
>> b/src/parallels/parallels_sdk.c
>> index faae1ae..5c15e94 100644
>> --- a/src/parallels/parallels_sdk.c
>> +++ b/src/parallels/parallels_sdk.c
>> @@ -1312,6 +1312,9 @@ prlsdkLoadDomain(parallelsConnPtr privconn,
>>               *s = '\0';
>>       }
>>   +    pret = PrlVmCfg_GetAutoStart(sdkdom, &autostart);
>> +    prlsdkCheckRetGoto(pret, error);
>> +
>>       if (virDomainDefAddImplicitControllers(def) < 0)
>>           goto error;
>>   @@ -1349,15 +1352,6 @@ prlsdkLoadDomain(parallelsConnPtr privconn,
>>       dom->privateDataFreeFunc = prlsdkDomObjFreePrivate;
>>       dom->persistent = 1;
>>   -    if (prlsdkGetDomainState(sdkdom, &domainState) < 0)
>> -        goto error;
>> -
>> -    if (prlsdkConvertDomainState(domainState, envId, dom) < 0)
>> -        goto error;
>> -
>> -    pret = PrlVmCfg_GetAutoStart(sdkdom, &autostart);
>> -    prlsdkCheckRetGoto(pret, error);
>> -
>>       switch (autostart) {
>>       case PAO_VM_START_ON_LOAD:
>>           dom->autostart = 1;
>> @@ -1371,6 +1365,12 @@ prlsdkLoadDomain(parallelsConnPtr privconn,
>>           goto error;
>>       }
>>   +    if (prlsdkGetDomainState(sdkdom, &domainState) < 0)
>> +        goto error;
>> +
>
> Why don't you move this ^^ call?

Makes sence even more than PrlVmCfg_GetAutoStart. Just missed it.
I'll add it in the second version of the patchset.
>
>> +    if (prlsdkConvertDomainState(domainState, envId, dom) < 0)
>> +        goto error;
>> +
>>       if (!pdom->sdkdom) {
>>           pret = PrlHandle_AddRef(sdkdom);
>>           prlsdkCheckRetGoto(pret, error);
>




More information about the libvir-list mailing list