From 4513eafe928ff47486f4167c28d364c72b5ff7e3 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Tue, 8 May 2012 16:51:45 +0200 Subject: block: add block_job_sleep_ns This function abstracts the pretty complex semantics of the "busy" member of BlockJob. Signed-off-by: Paolo Bonzini Signed-off-by: Kevin Wolf --- block.c | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'block.c') diff --git a/block.c b/block.c index 6154c3f..f9a11aa 100644 --- a/block.c +++ b/block.c @@ -4188,6 +4188,7 @@ void *block_job_create(const BlockJobType *job_type, BlockDriverState *bs, job->bs = bs; job->cb = cb; job->opaque = opaque; + job->busy = true; bs->job = job; /* Only set speed when necessary to avoid NotSupported error */ @@ -4254,3 +4255,13 @@ void block_job_cancel_sync(BlockJob *job) qemu_aio_wait(); } } + +void block_job_sleep_ns(BlockJob *job, QEMUClock *clock, int64_t ns) +{ + /* Check cancellation *before* setting busy = false, too! */ + if (!block_job_is_cancelled(job)) { + job->busy = false; + co_sleep_ns(clock, ns); + job->busy = true; + } +} -- cgit v1.1