#include "hashmap.h"
#include "macro.h"
#include "strv.h"
+#include "log.h"
Manager* manager_new(void) {
Manager *m;
j->object_list = other->object_list;
}
-
/* Kill the other job */
other->subject_list = NULL;
other->object_list = NULL;
for (k = from; k; k = (k->generation == generation ? k->marker : NULL)) {
if (!k->matters_to_anchor) {
+ log_debug("Breaking order cycle by deleting job %s", name_id(k->name));
manager_transaction_delete_job(m, k);
return -EAGAIN;
}
while (j->subject_list)
job_dependency_free(j->subject_list);
- while (j->object_list)
+
+ while (j->object_list) {
+ Job *other = j->object_list->matters ? j->object_list->subject : NULL;
+
job_dependency_free(j->object_list);
+
+ if (other) {
+ log_debug("Deleting job %s, as dependency of job %s", name_id(j->name), name_id(other->name));
+ manager_transaction_delete_job(m, other);
+ }
+ }
}
static int transaction_add_job_and_dependencies(Manager *m, JobType type, Name *name, Job *by, bool matters, bool force, Job **_ret) {
assert(type < _JOB_TYPE_MAX);
assert(name);
+ if (name->meta.state != NAME_LOADED)
+ return -EINVAL;
+
/* First add the job. */
if (!(ret = transaction_add_one_job(m, type, name, &is_new)))
return -ENOMEM;