Skip to content

Commit

Permalink
jobs: remove job_defer_to_main_loop
Browse files Browse the repository at this point in the history
Now that the job infrastructure is handling the job_completed call for
all implemented jobs, we can remove the interface that allowed jobs to
schedule their own completion.

Signed-off-by: John Snow <[email protected]>
Reviewed-by: Max Reitz <[email protected]>
Message-id: [email protected]
Signed-off-by: Max Reitz <[email protected]>
  • Loading branch information
jnsnow authored and XanClic committed Aug 31, 2018
1 parent 404ff28 commit e21a1c9
Show file tree
Hide file tree
Showing 2 changed files with 2 additions and 55 deletions.
17 changes: 0 additions & 17 deletions include/qemu/job.h
Original file line number Diff line number Diff line change
Expand Up @@ -568,23 +568,6 @@ void job_finalize(Job *job, Error **errp);
*/
void job_dismiss(Job **job, Error **errp);

typedef void JobDeferToMainLoopFn(Job *job, void *opaque);

/**
* @job: The job
* @fn: The function to run in the main loop
* @opaque: The opaque value that is passed to @fn
*
* This function must be called by the main job coroutine just before it
* returns. @fn is executed in the main loop with the job AioContext acquired.
*
* Block jobs must call bdrv_unref(), bdrv_close(), and anything that uses
* bdrv_drain_all() in the main loop.
*
* The @job AioContext is held while @fn executes.
*/
void job_defer_to_main_loop(Job *job, JobDeferToMainLoopFn *fn, void *opaque);

/**
* Synchronously finishes the given @job. If @finish is given, it is called to
* trigger completion or cancellation of the job.
Expand Down
40 changes: 2 additions & 38 deletions job.c
Original file line number Diff line number Diff line change
Expand Up @@ -561,12 +561,8 @@ static void coroutine_fn job_co_entry(void *opaque)
assert(job && job->driver && job->driver->run);
job_pause_point(job);
job->ret = job->driver->run(job, &job->err);
if (!job->deferred_to_main_loop) {
job->deferred_to_main_loop = true;
aio_bh_schedule_oneshot(qemu_get_aio_context(),
job_exit,
job);
}
job->deferred_to_main_loop = true;
aio_bh_schedule_oneshot(qemu_get_aio_context(), job_exit, job);
}


Expand Down Expand Up @@ -969,38 +965,6 @@ void job_complete(Job *job, Error **errp)
job->driver->complete(job, errp);
}


typedef struct {
Job *job;
JobDeferToMainLoopFn *fn;
void *opaque;
} JobDeferToMainLoopData;

static void job_defer_to_main_loop_bh(void *opaque)
{
JobDeferToMainLoopData *data = opaque;
Job *job = data->job;
AioContext *aio_context = job->aio_context;

aio_context_acquire(aio_context);
data->fn(data->job, data->opaque);
aio_context_release(aio_context);

g_free(data);
}

void job_defer_to_main_loop(Job *job, JobDeferToMainLoopFn *fn, void *opaque)
{
JobDeferToMainLoopData *data = g_malloc(sizeof(*data));
data->job = job;
data->fn = fn;
data->opaque = opaque;
job->deferred_to_main_loop = true;

aio_bh_schedule_oneshot(qemu_get_aio_context(),
job_defer_to_main_loop_bh, data);
}

int job_finish_sync(Job *job, void (*finish)(Job *, Error **errp), Error **errp)
{
Error *local_err = NULL;
Expand Down

0 comments on commit e21a1c9

Please sign in to comment.