[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 11/11] blockjob: use deferred_to_main_loop to in
From: |
Stefan Hajnoczi |
Subject: |
Re: [Qemu-devel] [PATCH 11/11] blockjob: use deferred_to_main_loop to indicate the coroutine has ended |
Date: |
Thu, 4 May 2017 12:07:01 +0100 |
User-agent: |
Mutt/1.8.0 (2017-02-23) |
On Wed, Apr 19, 2017 at 04:42:19PM +0200, Paolo Bonzini wrote:
> 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.
The defer_to_main_loop API was originally written as a utility that
could be called multiple times, not just during the final phase of the
block job. In practice we only use it to complete the block job.
I suggest integrating it more deeply into blockjob.c so that all jobs
automatically invoke it once and only once. There should be a
BlockJobDriver.main_loop_finalize() callback and the defer_to_main_loop
shouldn't be callable outside blockjob.c to prevent misuse.
signature.asc
Description: PGP signature
- Re: [Qemu-devel] [PATCH 11/11] blockjob: use deferred_to_main_loop to indicate the coroutine has ended,
Stefan Hajnoczi <=