chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
service: introduce Type=idle and use it for gettys
[elogind.git]
/
src
/
core
/
manager.c
diff --git
a/src/core/manager.c
b/src/core/manager.c
index f7ccba6235d87752817073d981fe6251d7c8af49..a6013668b8a8221997cf92cda3f3430e506f4758 100644
(file)
--- a/
src/core/manager.c
+++ b/
src/core/manager.c
@@
-259,6
+259,7
@@
int manager_new(ManagerRunningAs running_as, Manager **_m) {
m->name_data_slot = m->conn_data_slot = m->subscribed_data_slot = -1;
m->exit_code = _MANAGER_EXIT_CODE_INVALID;
m->pin_cgroupfs_fd = -1;
m->name_data_slot = m->conn_data_slot = m->subscribed_data_slot = -1;
m->exit_code = _MANAGER_EXIT_CODE_INVALID;
m->pin_cgroupfs_fd = -1;
+ m->idle_pipe[0] = m->idle_pipe[1] = -1;
#ifdef HAVE_AUDIT
m->audit_fd = -1;
#ifdef HAVE_AUDIT
m->audit_fd = -1;
@@
-518,6
+519,8
@@
void manager_free(Manager *m) {
hashmap_free(m->cgroup_bondings);
set_free_free(m->unit_path_cache);
hashmap_free(m->cgroup_bondings);
set_free_free(m->unit_path_cache);
+ close_pipe(m->idle_pipe);
+
free(m);
}
free(m);
}
@@
-1962,10
+1965,13
@@
void manager_check_finished(Manager *m) {
assert(m);
assert(m);
- if (
dual_timestamp_is_set(&m->finish_timestamp)
)
+ if (
hashmap_size(m->jobs) > 0
)
return;
return;
- if (hashmap_size(m->jobs) > 0)
+ /* Notify Type=idle units that we are done now */
+ close_pipe(m->idle_pipe);
+
+ if (dual_timestamp_is_set(&m->finish_timestamp))
return;
dual_timestamp_get(&m->finish_timestamp);
return;
dual_timestamp_get(&m->finish_timestamp);