blockjob: Split block_job_event_pending()

block_job_event_pending() doesn't only send a QMP event, but it also
transitions to the PENDING state. Split the function so that we get one
part only sending the event (like other block_job_event_* functions) and
another part that does the state transition.

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
stable-3.0
Kevin Wolf 2018-04-23 17:09:42 +02:00
parent bb02b65c7d
commit 5d4f376998
1 changed files with 18 additions and 9 deletions

View File

@ -38,7 +38,7 @@
static void block_job_event_cancelled(BlockJob *job);
static void block_job_event_completed(BlockJob *job, const char *msg);
static int block_job_event_pending(BlockJob *job);
static void block_job_event_pending(BlockJob *job);
/* Transactional group of block jobs */
struct BlockJobTxn {
@ -500,6 +500,15 @@ static void block_job_do_finalize(BlockJob *job)
}
}
static int block_job_transition_to_pending(BlockJob *job)
{
job_state_transition(&job->job, JOB_STATUS_PENDING);
if (!job->job.auto_finalize) {
block_job_event_pending(job);
}
return 0;
}
static void block_job_completed_txn_success(BlockJob *job)
{
BlockJobTxn *txn = job->txn;
@ -518,7 +527,7 @@ static void block_job_completed_txn_success(BlockJob *job)
assert(other_job->ret == 0);
}
block_job_txn_apply(txn, block_job_event_pending, false);
block_job_txn_apply(txn, block_job_transition_to_pending, false);
/* If no jobs need manual finalization, automatically do so */
if (block_job_txn_apply(txn, block_job_needs_finalize, false) == 0) {
@ -733,15 +742,15 @@ static void block_job_event_completed(BlockJob *job, const char *msg)
&error_abort);
}
static int block_job_event_pending(BlockJob *job)
static void block_job_event_pending(BlockJob *job)
{
job_state_transition(&job->job, JOB_STATUS_PENDING);
if (!job->job.auto_finalize && !block_job_is_internal(job)) {
qapi_event_send_block_job_pending(job_type(&job->job),
job->job.id,
&error_abort);
if (block_job_is_internal(job)) {
return;
}
return 0;
qapi_event_send_block_job_pending(job_type(&job->job),
job->job.id,
&error_abort);
}
/*