blockjob: Add block_job_yield()
This will unset busy flag and put coroutine to sleep, can be used to wait for QMP complete/cancel. Signed-off-by: Fam Zheng <famz@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
2b5b7ae917
commit
dc71ce45de
14
blockjob.c
14
blockjob.c
@ -210,6 +210,20 @@ void block_job_sleep_ns(BlockJob *job, QEMUClockType type, int64_t ns)
|
|||||||
job->busy = true;
|
job->busy = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void block_job_yield(BlockJob *job)
|
||||||
|
{
|
||||||
|
assert(job->busy);
|
||||||
|
|
||||||
|
/* Check cancellation *before* setting busy = false, too! */
|
||||||
|
if (block_job_is_cancelled(job)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
job->busy = false;
|
||||||
|
qemu_coroutine_yield();
|
||||||
|
job->busy = true;
|
||||||
|
}
|
||||||
|
|
||||||
BlockJobInfo *block_job_query(BlockJob *job)
|
BlockJobInfo *block_job_query(BlockJob *job)
|
||||||
{
|
{
|
||||||
BlockJobInfo *info = g_new0(BlockJobInfo, 1);
|
BlockJobInfo *info = g_new0(BlockJobInfo, 1);
|
||||||
|
@ -146,6 +146,14 @@ void *block_job_create(const BlockJobDriver *driver, BlockDriverState *bs,
|
|||||||
*/
|
*/
|
||||||
void block_job_sleep_ns(BlockJob *job, QEMUClockType type, int64_t ns);
|
void block_job_sleep_ns(BlockJob *job, QEMUClockType type, int64_t ns);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* block_job_yield:
|
||||||
|
* @job: The job that calls the function.
|
||||||
|
*
|
||||||
|
* Yield the block job coroutine.
|
||||||
|
*/
|
||||||
|
void block_job_yield(BlockJob *job);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* block_job_completed:
|
* block_job_completed:
|
||||||
* @job: The job being completed.
|
* @job: The job being completed.
|
||||||
|
Loading…
Reference in New Issue
Block a user