blockjob: use deferred_to_main_loop to indicate the coroutine has ended
commiteb05e011e248c6fb6baee295e14fd206e136028c
authorPaolo Bonzini <pbonzini@redhat.com>
Mon, 8 May 2017 14:13:10 +0000 (8 16:13 +0200)
committerJeff Cody <jcody@redhat.com>
Wed, 24 May 2017 20:38:51 +0000 (24 16:38 -0400)
treeab38894e8cee57f1e1d2ca690b74bc00800673cb
parent4fb588e95bacb770746cc794ef165fd71a4d27ea
blockjob: use deferred_to_main_loop to indicate the coroutine has ended

All block jobs are using block_job_defer_to_main_loop as the final
step just before the coroutine terminates.  At this point,
block_job_enter should do nothing, but currently it restarts
the freed coroutine.

Now, the job->co states should probably be changed to an enum
(e.g. BEFORE_START, STARTED, YIELDED, COMPLETED) subsuming
block_job_started, job->deferred_to_main_loop and job->busy.
For now, this patch eliminates the problematic reenter by
removing the reset of job->deferred_to_main_loop (which served
no purpose, as far as I could see) and checking the flag in
block_job_enter.

Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Message-id: 20170508141310.8674-12-pbonzini@redhat.com
Signed-off-by: Jeff Cody <jcody@redhat.com>
blockjob.c
include/block/blockjob_int.h