|
@@ -381,6 +381,8 @@ void job_ref(Job *job)
|
|
|
|
|
|
void job_unref(Job *job)
|
|
void job_unref(Job *job)
|
|
{
|
|
{
|
|
|
|
+ GLOBAL_STATE_CODE();
|
|
|
|
+
|
|
if (--job->refcnt == 0) {
|
|
if (--job->refcnt == 0) {
|
|
assert(job->status == JOB_STATUS_NULL);
|
|
assert(job->status == JOB_STATUS_NULL);
|
|
assert(!timer_pending(&job->sleep_timer));
|
|
assert(!timer_pending(&job->sleep_timer));
|
|
@@ -602,6 +604,7 @@ bool job_user_paused(Job *job)
|
|
void job_user_resume(Job *job, Error **errp)
|
|
void job_user_resume(Job *job, Error **errp)
|
|
{
|
|
{
|
|
assert(job);
|
|
assert(job);
|
|
|
|
+ GLOBAL_STATE_CODE();
|
|
if (!job->user_paused || job->pause_count <= 0) {
|
|
if (!job->user_paused || job->pause_count <= 0) {
|
|
error_setg(errp, "Can't resume a job that was not paused");
|
|
error_setg(errp, "Can't resume a job that was not paused");
|
|
return;
|
|
return;
|
|
@@ -672,6 +675,7 @@ static void job_update_rc(Job *job)
|
|
static void job_commit(Job *job)
|
|
static void job_commit(Job *job)
|
|
{
|
|
{
|
|
assert(!job->ret);
|
|
assert(!job->ret);
|
|
|
|
+ GLOBAL_STATE_CODE();
|
|
if (job->driver->commit) {
|
|
if (job->driver->commit) {
|
|
job->driver->commit(job);
|
|
job->driver->commit(job);
|
|
}
|
|
}
|
|
@@ -680,6 +684,7 @@ static void job_commit(Job *job)
|
|
static void job_abort(Job *job)
|
|
static void job_abort(Job *job)
|
|
{
|
|
{
|
|
assert(job->ret);
|
|
assert(job->ret);
|
|
|
|
+ GLOBAL_STATE_CODE();
|
|
if (job->driver->abort) {
|
|
if (job->driver->abort) {
|
|
job->driver->abort(job);
|
|
job->driver->abort(job);
|
|
}
|
|
}
|
|
@@ -687,6 +692,7 @@ static void job_abort(Job *job)
|
|
|
|
|
|
static void job_clean(Job *job)
|
|
static void job_clean(Job *job)
|
|
{
|
|
{
|
|
|
|
+ GLOBAL_STATE_CODE();
|
|
if (job->driver->clean) {
|
|
if (job->driver->clean) {
|
|
job->driver->clean(job);
|
|
job->driver->clean(job);
|
|
}
|
|
}
|
|
@@ -726,6 +732,7 @@ static int job_finalize_single(Job *job)
|
|
|
|
|
|
static void job_cancel_async(Job *job, bool force)
|
|
static void job_cancel_async(Job *job, bool force)
|
|
{
|
|
{
|
|
|
|
+ GLOBAL_STATE_CODE();
|
|
if (job->driver->cancel) {
|
|
if (job->driver->cancel) {
|
|
force = job->driver->cancel(job, force);
|
|
force = job->driver->cancel(job, force);
|
|
} else {
|
|
} else {
|
|
@@ -825,6 +832,7 @@ static void job_completed_txn_abort(Job *job)
|
|
|
|
|
|
static int job_prepare(Job *job)
|
|
static int job_prepare(Job *job)
|
|
{
|
|
{
|
|
|
|
+ GLOBAL_STATE_CODE();
|
|
if (job->ret == 0 && job->driver->prepare) {
|
|
if (job->ret == 0 && job->driver->prepare) {
|
|
job->ret = job->driver->prepare(job);
|
|
job->ret = job->driver->prepare(job);
|
|
job_update_rc(job);
|
|
job_update_rc(job);
|
|
@@ -952,6 +960,7 @@ static void coroutine_fn job_co_entry(void *opaque)
|
|
Job *job = opaque;
|
|
Job *job = opaque;
|
|
|
|
|
|
assert(job && job->driver && job->driver->run);
|
|
assert(job && job->driver && job->driver->run);
|
|
|
|
+ assert(job->aio_context == qemu_get_current_aio_context());
|
|
job_pause_point(job);
|
|
job_pause_point(job);
|
|
job->ret = job->driver->run(job, &job->err);
|
|
job->ret = job->driver->run(job, &job->err);
|
|
job->deferred_to_main_loop = true;
|
|
job->deferred_to_main_loop = true;
|
|
@@ -1054,6 +1063,7 @@ void job_complete(Job *job, Error **errp)
|
|
{
|
|
{
|
|
/* Should not be reachable via external interface for internal jobs */
|
|
/* Should not be reachable via external interface for internal jobs */
|
|
assert(job->id);
|
|
assert(job->id);
|
|
|
|
+ GLOBAL_STATE_CODE();
|
|
if (job_apply_verb(job, JOB_VERB_COMPLETE, errp)) {
|
|
if (job_apply_verb(job, JOB_VERB_COMPLETE, errp)) {
|
|
return;
|
|
return;
|
|
}
|
|
}
|