diff --git a/include/qemu/job.h b/include/qemu/job.h index 32aabb1c60009825ca4a921b78643fcdc7468ed9..efc6fa754498475659220d96e66b929bfcbadef0 100644 --- a/include/qemu/job.h +++ b/include/qemu/job.h @@ -251,6 +251,11 @@ struct JobDriver { */ void (*clean)(Job *job); + /** + * If the callback is not NULL, it will be invoked in job_cancel_async + */ + void (*cancel)(Job *job); + /** Called when the job is freed */ void (*free)(Job *job); diff --git a/job.c b/job.c index 3aaaebafe2c87cd83e16ea6bc9577210f1089fa9..289edee143740c4598069d595125b67cc38d204e 100644 --- a/job.c +++ b/job.c @@ -715,6 +715,9 @@ static int job_finalize_single(Job *job) static void job_cancel_async(Job *job, bool force) { + if (job->driver->cancel) { + job->driver->cancel(job); + } if (job->user_paused) { /* Do not call job_enter here, the caller will handle it. */ if (job->driver->user_resume) {