qemu-devel
[Top][All Lists]
Advanced

[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.

Attachment: signature.asc
Description: PGP signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]