[PATCH v2 1/7] hyperv: implement domainSetAutostart
Michal Prívozník
mprivozn at redhat.com
Mon Oct 19 09:33:39 UTC 2020
On 10/17/20 10:39 PM, Matt Coleman wrote:
>> On Oct 15, 2020, at 8:57 AM, Michal Privoznik <mprivozn at redhat.com> wrote:
>>
>> On 10/13/20 7:13 AM, Matt Coleman wrote:
>>> + char enabledValue[] = "2", disabledValue[] = "0";
>>> +
>>> + if (priv->wmiVersion == HYPERV_WMI_VERSION_V1) {
>>> + methodName = "ModifyVirtualSystem";
>>> + embeddedParamName = "SystemSettingData";
>>> + embeddedParamClass = Msvm_VirtualSystemGlobalSettingData_WmiInfo;
>>> + } else if (priv->wmiVersion == HYPERV_WMI_VERSION_V2) {
>>> + methodName = "ModifySystemSettings";
>>> + embeddedParamName = "SystemSettings";
>>> + embeddedParamClass = Msvm_VirtualSystemSettingData_WmiInfo;
>>> + enabledValue[0] = '4';
>>> + disabledValue[0] = '2';
>>> + }
>>
>> As pino pointed out, this can be just one if.
>
> Pino only suggested using a uniform approach but didn’t recommend a
> specific solution. Is the single if statement how you’d prefer to see it
> done? I think it would be clearer if it were more verbose: initially
> declare the variables either as NULL or with a dummy value, then set
> all of the variables’ values in conditional blocks for each supported
> Hyper-V version.
I don't have a strong preference. But it seems a bit weird to init only
some variables when declaring them to desired value and then have if()
to init the rest. I understand why you needed to do it though => so that
@enabledValue and @disabledValue are allocated and you could overwrite
them in VERSION_V2 branch. Speaking of which, let me see if I can do
something about that.
As for you original question, how about initializing all variables to
NULL and replacing if (version == _V1) { } else if (version == _V2) {}
with a switch statement? My worry is that if we ever introduce _V3 these
if-else statements won't catch it, with switch the compiler will notify
us about missing case.
>
>>> + params_cleanup:
>>> + hypervFreeInvokeParams(params);
>>
>> So the only reason for the separate lable is that hypervInvokeMethod() consumes @params and thus we must avoid jumping here once it was called. Fortunately, hypervFreeInvokeParams() accepts NULL so what we can do is to set params = NULL in both success and fail paths.
>>
>> I'll post a patch that makes hypervInvokeMethod() behave more sanely.
>
> Thanks for that patch - makes it much clearer.
>
>> Anyway, this is what I suggest is squashed in (I can squash it before pushing if you agree):
>
> That sounds good to me unless you liked my earlier idea to be more
> verbose about the conditionals. If you do, then I think I should just
> revise the whole patchset.
>
> If you prefer the shorter conditionals, then it looks like we could go
> forward with 1, 2, 5, and 6 (if you can squash my requested change into
> it - see that thread) for now. There are some small changes I’d like to
> make to patches 3 and 4 in this series based on Pino’s comments.
>
> Based on the number of proposed squashed changes, the fact that I want
> to make changes to two commits in the middle of this set, and since
> slight changes will need to be made in order to work with your
> ownership transfer patchset, it seems to me like I should revise it all
> and send v3. Do you agree?
Right, at this point I agree that v3 is more clearer.
Michal
More information about the libvir-list
mailing list