On 17.02.2017 11:23, Jiri Denemark wrote:
On Thu, Feb 16, 2017 at 16:15:02 +0100, Jiri Denemark wrote:
> On Wed, Dec 28, 2016 at 17:39:15 +0300, Nikolay Shirokovskiy wrote:
>> qemuMigrationFetchJobStatus is rather inconvinient. If we poll
>> stats for status only then we don't need to update elapsed time.
>> Next on some paths we use this function to get stats only we don't
>> what to unexpectedly update job status. So the common part
>> is only enter/exit which is too little to have a distinct function.
>>
>> Let's open code getting stats and update elapsed time and status
>> where appropriate.
>>
>> The patch also drops qemuMigrationUpdateJobStatus. It's value
>> is only in keeping job status on failures. Now we have option
>> not to update status when we want to.
...
>> @@ -2624,23 +2602,6 @@ qemuMigrationJobName(virDomainObjPtr vm)
>>
>>
>> static int
>> -qemuMigrationUpdateJobStatus(virQEMUDriverPtr driver,
>> - virDomainObjPtr vm,
>> - qemuDomainAsyncJob asyncJob)
>> -{
>> - qemuDomainObjPrivatePtr priv = vm->privateData;
>> - qemuDomainJobInfoPtr jobInfo = priv->job.current;
>> - qemuDomainJobInfo newInfo = *jobInfo;
>> -
>> - if (qemuMigrationFetchJobStatus(driver, vm, asyncJob, &newInfo) < 0)
>> - return -1;
>> -
>> - *jobInfo = newInfo;
>> - return 0;
>> -}
>
> The goal of this function is to avoid touching priv->job.current in case
> of failure. Since qemuMonitorGetMigrationStats memsets
> qemuDomainJobInfo, we would lose its original contents, which is
> definitely not something we want.
And I forgot to mention that the code should not touch
priv->job.current between EnterMonitorAsync/ExitMonitor.
Ooh, i missed that. Using domain object without domain lock...
Nikolay