X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=job.c;h=7accf7267b1a58a839e3a2564d7e85cca13863a2;hp=0ae1a765fb06a3f387296d0eda76e377da4a3c6f;hb=83c60c9f0c7581b607dc5c0f84582978894e3d4a;hpb=542563babda739f7aee468c3eaaab6315ffa4224;ds=sidebyside diff --git a/job.c b/job.c index 0ae1a765f..7accf7267 100644 --- a/job.c +++ b/job.c @@ -362,6 +362,8 @@ int job_run_and_invalidate(Job *j) { if (j->state != JOB_WAITING) return 0; + j->state = JOB_RUNNING; + switch (j->type) { case JOB_START: @@ -422,11 +424,12 @@ int job_run_and_invalidate(Job *j) { ; } - if (r >= 0) - j->state = JOB_RUNNING; - else if (r == -EALREADY) + if (r == -EALREADY) r = job_finish_and_invalidate(j, true); - else if (r != -EAGAIN) + else if (r == -EAGAIN) { + j->state = JOB_WAITING; + return -EAGAIN; + } else if (r < 0) r = job_finish_and_invalidate(j, false); return r;