chiark / gitweb /
service: optionally, create INIT_PROCESS/DEAD_PROCESS entries for a service
[elogind.git] / src / service.c
index 116e539d951df7303039759645589b54b0e49342..04496a2dd2913897801e8db5f63b6564b5405b73 100644 (file)
@@ -39,6 +39,9 @@
 #define NEWLINES "\n\r"
 
 #ifdef HAVE_SYSV_COMPAT
+
+#define DEFAULT_SYSV_TIMEOUT_USEC (3*USEC_PER_MINUTE)
+
 typedef enum RunlevelType {
         RUNLEVEL_UP,
         RUNLEVEL_DOWN,
@@ -790,7 +793,8 @@ static int service_load_sysv_path(Service *s, const char *path) {
 
                 /* Don't timeout special services during boot (like fsck) */
                 s->timeout_usec = 0;
-        }
+        } else
+                s->timeout_usec = DEFAULT_SYSV_TIMEOUT_USEC;
 
         /* Special setting for all SysV services */
         s->type = SERVICE_FORKING;
@@ -2402,7 +2406,7 @@ static void service_sigchld_event(Unit *u, pid_t pid, int code, int status) {
         if (s->main_pid == pid) {
 
                 s->main_pid = 0;
-                exec_status_exit(&s->main_exec_status, pid, code, status);
+                exec_status_exit(&s->main_exec_status, pid, code, status, s->exec_context.utmp_id);
 
                 if (s->type != SERVICE_FORKING && s->control_command) {
                         s->control_command->exec_status = s->main_exec_status;
@@ -2479,7 +2483,7 @@ static void service_sigchld_event(Unit *u, pid_t pid, int code, int status) {
                 s->control_pid = 0;
 
                 if (s->control_command) {
-                        exec_status_exit(&s->control_command->exec_status, pid, code, status);
+                        exec_status_exit(&s->control_command->exec_status, pid, code, status, s->exec_context.utmp_id);
 
                         if (s->control_command->ignore)
                                 success = true;