mirror of https://github.com/xemu-project/xemu.git
block: for jobs, do not clear user_paused until after the resume
The function job_cancel_async() will always cause an assert for blockjob user resume. We set job->user_paused to false, and then call job->driver->user_resume(). In the case of blockjobs, this is the block_job_user_resume() function. In that function, we assert that job.user_paused is set to true. Unfortunately, right before calling this function, it has explicitly been set to false. The fix is pretty simple: set job->user_paused to false only after the job user_resume() function has been called. Reviewed-by: John Snow <jsnow@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Signed-off-by: Jeff Cody <jcody@redhat.com> Message-id: bb183b77d8f2dd6bd67b8da559a90ac1e74b2052.1534868459.git.jcody@redhat.com Signed-off-by: Jeff Cody <jcody@redhat.com>
This commit is contained in:
parent
ee135aa042
commit
e321c0597c
2
job.c
2
job.c
|
@ -732,10 +732,10 @@ static void job_cancel_async(Job *job, bool force)
|
||||||
{
|
{
|
||||||
if (job->user_paused) {
|
if (job->user_paused) {
|
||||||
/* Do not call job_enter here, the caller will handle it. */
|
/* Do not call job_enter here, the caller will handle it. */
|
||||||
job->user_paused = false;
|
|
||||||
if (job->driver->user_resume) {
|
if (job->driver->user_resume) {
|
||||||
job->driver->user_resume(job);
|
job->driver->user_resume(job);
|
||||||
}
|
}
|
||||||
|
job->user_paused = false;
|
||||||
assert(job->pause_count > 0);
|
assert(job->pause_count > 0);
|
||||||
job->pause_count--;
|
job->pause_count--;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue