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
/
execute.c
diff --git
a/src/core/execute.c
b/src/core/execute.c
index c59f7e2daa63b3c50bfc8ecb081a2e9be9fb62ba..99a7881f1cbbc81c03d2af9fe36ca5dfe87e7ec1 100644
(file)
--- a/
src/core/execute.c
+++ b/
src/core/execute.c
@@
-37,6
+37,7
@@
#include <sys/mount.h>
#include <linux/fs.h>
#include <linux/oom.h>
#include <sys/mount.h>
#include <linux/fs.h>
#include <linux/oom.h>
+#include <sys/poll.h>
#ifdef HAVE_PAM
#include <security/pam_appl.h>
#ifdef HAVE_PAM
#include <security/pam_appl.h>
@@
-963,6
+964,7
@@
int exec_spawn(ExecCommand *command,
CGroupBonding *cgroup_bondings,
CGroupAttribute *cgroup_attributes,
const char *cgroup_suffix,
CGroupBonding *cgroup_bondings,
CGroupAttribute *cgroup_attributes,
const char *cgroup_suffix,
+ int idle_pipe[2],
pid_t *ret) {
pid_t pid;
pid_t *ret) {
pid_t pid;
@@
-1050,6
+1052,15
@@
int exec_spawn(ExecCommand *command,
goto fail_child;
}
goto fail_child;
}
+ if (idle_pipe) {
+ if (idle_pipe[1] >= 0)
+ close_nointr_nofail(idle_pipe[1]);
+ if (idle_pipe[0] >= 0) {
+ fd_wait_for_event(idle_pipe[0], POLLHUP, DEFAULT_TIMEOUT_USEC);
+ close_nointr_nofail(idle_pipe[0]);
+ }
+ }
+
/* Close sockets very early to make sure we don't
* block init reexecution because it cannot bind its
* sockets */
/* Close sockets very early to make sure we don't
* block init reexecution because it cannot bind its
* sockets */