chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
don't include non-existing header file
[elogind.git]
/
job.c
diff --git
a/job.c
b/job.c
index a2100e3318bce17eb02c2d59410fae749a41a135..148c7458b09fe2c32e719a028b94b760269cd718 100644
(file)
--- a/
job.c
+++ b/
job.c
@@
-5,13
+5,14
@@
#include "macro.h"
#include "job.h"
#include "macro.h"
#include "job.h"
+#include "log.h"
-Job* job_new(Manager *m, JobType type,
Name *name
) {
+Job* job_new(Manager *m, JobType type,
Unit *unit
) {
Job *j;
assert(m);
assert(type < _JOB_TYPE_MAX);
Job *j;
assert(m);
assert(type < _JOB_TYPE_MAX);
- assert(
name
);
+ assert(
unit
);
if (!(j = new0(Job, 1)))
return NULL;
if (!(j = new0(Job, 1)))
return NULL;
@@
-19,7
+20,7
@@
Job* job_new(Manager *m, JobType type, Name *name) {
j->manager = m;
j->id = m->current_job_id++;
j->type = type;
j->manager = m;
j->id = m->current_job_id++;
j->type = type;
- j->
name = name
;
+ j->
unit = unit
;
/* We don't link it here, that's what job_dependency() is for */
/* We don't link it here, that's what job_dependency() is for */
@@
-30,12
+31,12
@@
void job_free(Job *j) {
assert(j);
/* Detach from next 'bigger' objects */
assert(j);
/* Detach from next 'bigger' objects */
- if (j->
link
ed) {
- if (j->
name
->meta.job == j)
- j->
name
->meta.job = NULL;
+ if (j->
install
ed) {
+ if (j->
unit
->meta.job == j)
+ j->
unit
->meta.job = NULL;
hashmap_remove(j->manager->jobs, UINT32_TO_PTR(j->id));
hashmap_remove(j->manager->jobs, UINT32_TO_PTR(j->id));
- j->
link
ed = false;
+ j->
install
ed = false;
}
/* Detach from next 'smaller' objects */
}
/* Detach from next 'smaller' objects */
@@
-142,7
+143,7
@@
void job_dump(Job *j, FILE*f, const char *prefix) {
"%s\tState: %s\n"
"%s\tForced: %s\n",
prefix, j->id,
"%s\tState: %s\n"
"%s\tForced: %s\n",
prefix, j->id,
- prefix,
name_id(j->name
), job_type_to_string(j->type),
+ prefix,
unit_id(j->unit
), job_type_to_string(j->type),
prefix, job_state_table[j->state],
prefix, yes_no(j->forced));
}
prefix, job_state_table[j->state],
prefix, yes_no(j->forced));
}
@@
-257,12
+258,12
@@
bool job_type_is_conflicting(JobType a, JobType b) {
bool job_is_runnable(Job *j) {
Iterator i;
bool job_is_runnable(Job *j) {
Iterator i;
-
Name
*other;
+
Unit
*other;
assert(j);
assert(j);
- assert(j->
link
ed);
+ assert(j->
install
ed);
- /* Checks whether there is any job running for the
name
s this
+ /* Checks whether there is any job running for the
unit
s this
* job needs to be running after (in the case of a 'positive'
* job type) or before (in the case of a 'negative' job type
* . */
* job needs to be running after (in the case of a 'positive'
* job type) or before (in the case of a 'negative' job type
* . */
@@
-277,7
+278,7
@@
bool job_is_runnable(Job *j) {
* dependencies, regardless whether they are
* starting or stopping something. */
* dependencies, regardless whether they are
* starting or stopping something. */
- SET_FOREACH(other, j->
name->meta.dependencies[NAME
_AFTER], i)
+ SET_FOREACH(other, j->
unit->meta.dependencies[UNIT
_AFTER], i)
if (other->meta.job)
return false;
}
if (other->meta.job)
return false;
}
@@
-285,7
+286,7
@@
bool job_is_runnable(Job *j) {
/* Also, if something else is being stopped and we should
* change state after it, then lets wait. */
/* Also, if something else is being stopped and we should
* change state after it, then lets wait. */
- SET_FOREACH(other, j->
name->meta.dependencies[NAME
_BEFORE], i)
+ SET_FOREACH(other, j->
unit->meta.dependencies[UNIT
_BEFORE], i)
if (other->meta.job &&
(other->meta.job->type == JOB_STOP ||
other->meta.job->type == JOB_RESTART ||
if (other->meta.job &&
(other->meta.job->type == JOB_STOP ||
other->meta.job->type == JOB_RESTART ||
@@
-308,7
+309,9
@@
bool job_is_runnable(Job *j) {
int job_run_and_invalidate(Job *j) {
int r;
int job_run_and_invalidate(Job *j) {
int r;
+
assert(j);
assert(j);
+ assert(j->installed);
if (j->in_run_queue) {
LIST_REMOVE(Job, run_queue, j->manager->run_queue, j);
if (j->in_run_queue) {
LIST_REMOVE(Job, run_queue, j->manager->run_queue, j);
@@
-326,16
+329,16
@@
int job_run_and_invalidate(Job *j) {
switch (j->type) {
case JOB_START:
switch (j->type) {
case JOB_START:
- r =
name_start(j->name
);
+ r =
unit_start(j->unit
);
if (r == -EBADR)
r = 0;
break;
case JOB_VERIFY_ACTIVE: {
if (r == -EBADR)
r = 0;
break;
case JOB_VERIFY_ACTIVE: {
-
NameActiveState t = name_active_state(j->name
);
- if (
NAME
_IS_ACTIVE_OR_RELOADING(t))
+
UnitActiveState t = unit_active_state(j->unit
);
+ if (
UNIT
_IS_ACTIVE_OR_RELOADING(t))
r = -EALREADY;
r = -EALREADY;
- else if (t ==
NAME
_ACTIVATING)
+ else if (t ==
UNIT
_ACTIVATING)
r = -EAGAIN;
else
r = -ENOEXEC;
r = -EAGAIN;
else
r = -ENOEXEC;
@@
-343,39
+346,39
@@
int job_run_and_invalidate(Job *j) {
}
case JOB_STOP:
}
case JOB_STOP:
- r =
name_stop(j->name
);
+ r =
unit_stop(j->unit
);
break;
case JOB_RELOAD:
break;
case JOB_RELOAD:
- r =
name_reload(j->name
);
+ r =
unit_reload(j->unit
);
break;
case JOB_RELOAD_OR_START:
break;
case JOB_RELOAD_OR_START:
- if (
name_active_state(j->name) == NAME
_ACTIVE)
- r =
name_reload(j->name
);
+ if (
unit_active_state(j->unit) == UNIT
_ACTIVE)
+ r =
unit_reload(j->unit
);
else
else
- r =
name_start(j->name
);
+ r =
unit_start(j->unit
);
break;
case JOB_RESTART: {
break;
case JOB_RESTART: {
-
NameActiveState t = name_active_state(j->name
);
- if (t ==
NAME_INACTIVE || t == NAME
_ACTIVATING) {
+
UnitActiveState t = unit_active_state(j->unit
);
+ if (t ==
UNIT_INACTIVE || t == UNIT
_ACTIVATING) {
j->type = JOB_START;
j->type = JOB_START;
- r =
name_start(j->name
);
+ r =
unit_start(j->unit
);
} else
} else
- r =
name_stop(j->name
);
+ r =
unit_stop(j->unit
);
break;
}
case JOB_TRY_RESTART: {
break;
}
case JOB_TRY_RESTART: {
-
NameActiveState t = name_active_state(j->name
);
- if (t ==
NAME_INACTIVE || t == NAME
_DEACTIVATING)
+
UnitActiveState t = unit_active_state(j->unit
);
+ if (t ==
UNIT_INACTIVE || t == UNIT
_DEACTIVATING)
r = -ENOEXEC;
r = -ENOEXEC;
- else if (t ==
NAME
_ACTIVATING) {
+ else if (t ==
UNIT
_ACTIVATING) {
j->type = JOB_START;
j->type = JOB_START;
- r =
name_start(j->name
);
+ r =
unit_start(j->unit
);
} else
} else
- r =
name_stop(j->name
);
+ r =
unit_stop(j->unit
);
break;
}
break;
}
@@
-395,22
+398,31
@@
int job_run_and_invalidate(Job *j) {
}
int job_finish_and_invalidate(Job *j, bool success) {
}
int job_finish_and_invalidate(Job *j, bool success) {
-
Name *n
;
-
Name
*other;
-
Name
Type t;
+
Unit *u
;
+
Unit
*other;
+
Unit
Type t;
Iterator i;
assert(j);
Iterator i;
assert(j);
+ assert(j->installed);
+
+ log_debug("Job %s/%s finished, success=%s", unit_id(j->unit), job_type_to_string(j->type), yes_no(success));
/* Patch restart jobs so that they become normal start jobs */
if (success && (j->type == JOB_RESTART || j->type == JOB_TRY_RESTART)) {
/* Patch restart jobs so that they become normal start jobs */
if (success && (j->type == JOB_RESTART || j->type == JOB_TRY_RESTART)) {
+
+ log_debug("Converting job %s/%s → %s/%s",
+ unit_id(j->unit), job_type_to_string(j->type),
+ unit_id(j->unit), job_type_to_string(JOB_START));
+
j->state = JOB_RUNNING;
j->type = JOB_START;
j->state = JOB_RUNNING;
j->type = JOB_START;
+
job_schedule_run(j);
return 0;
}
job_schedule_run(j);
return 0;
}
-
n = j->name
;
+
u = j->unit
;
t = j->type;
job_free(j);
t = j->type;
job_free(j);
@@
-421,14
+433,14
@@
int job_finish_and_invalidate(Job *j, bool success) {
t == JOB_VERIFY_ACTIVE ||
t == JOB_RELOAD_OR_START) {
t == JOB_VERIFY_ACTIVE ||
t == JOB_RELOAD_OR_START) {
- SET_FOREACH(other,
n->meta.dependencies[NAME
_REQUIRED_BY], i)
+ SET_FOREACH(other,
u->meta.dependencies[UNIT
_REQUIRED_BY], i)
if (other->meta.job &&
(other->meta.type == JOB_START ||
other->meta.type == JOB_VERIFY_ACTIVE ||
other->meta.type == JOB_RELOAD_OR_START))
job_finish_and_invalidate(other->meta.job, false);
if (other->meta.job &&
(other->meta.type == JOB_START ||
other->meta.type == JOB_VERIFY_ACTIVE ||
other->meta.type == JOB_RELOAD_OR_START))
job_finish_and_invalidate(other->meta.job, false);
- SET_FOREACH(other,
n->meta.dependencies[NAME
_SOFT_REQUIRED_BY], i)
+ SET_FOREACH(other,
u->meta.dependencies[UNIT
_SOFT_REQUIRED_BY], i)
if (other->meta.job &&
!other->meta.job->forced &&
(other->meta.type == JOB_START ||
if (other->meta.job &&
!other->meta.job->forced &&
(other->meta.type == JOB_START ||
@@
-438,7
+450,7
@@
int job_finish_and_invalidate(Job *j, bool success) {
} else if (t == JOB_STOP) {
} else if (t == JOB_STOP) {
- SET_FOREACH(other,
n->meta.dependencies[NAME
_CONFLICTS], i)
+ SET_FOREACH(other,
u->meta.dependencies[UNIT
_CONFLICTS], i)
if (other->meta.job &&
(t == JOB_START ||
t == JOB_VERIFY_ACTIVE ||
if (other->meta.job &&
(t == JOB_START ||
t == JOB_VERIFY_ACTIVE ||
@@
-448,10
+460,10
@@
int job_finish_and_invalidate(Job *j, bool success) {
}
/* Try to start the next jobs that can be started */
}
/* Try to start the next jobs that can be started */
- SET_FOREACH(other,
n->meta.dependencies[NAME
_AFTER], i)
+ SET_FOREACH(other,
u->meta.dependencies[UNIT
_AFTER], i)
if (other->meta.job)
job_schedule_run(other->meta.job);
if (other->meta.job)
job_schedule_run(other->meta.job);
- SET_FOREACH(other,
n->meta.dependencies[NAME
_BEFORE], i)
+ SET_FOREACH(other,
u->meta.dependencies[UNIT
_BEFORE], i)
if (other->meta.job)
job_schedule_run(other->meta.job);
if (other->meta.job)
job_schedule_run(other->meta.job);
@@
-460,7
+472,7
@@
int job_finish_and_invalidate(Job *j, bool success) {
void job_schedule_run(Job *j) {
assert(j);
void job_schedule_run(Job *j) {
assert(j);
- assert(j->
link
ed);
+ assert(j->
install
ed);
if (j->in_run_queue)
return;
if (j->in_run_queue)
return;