Set fonts in init-early.sh, don't stop services twice when shutting down and lock prefixed output.

This commit is contained in:
Roy Marples
2007-04-26 11:24:07 +00:00
parent 431e8cc84f
commit cf9aa106c6
4 changed files with 57 additions and 19 deletions

View File

@ -33,6 +33,8 @@
#define RCSCRIPT_HELP RC_LIBDIR "/sh/rc-help.sh"
#define SELINUX_LIB RC_LIBDIR "/runscript_selinux.so"
#define PREFIX_LOCK RC_SVCDIR "/prefix.lock"
static char *applet = NULL;
static char *exclusive = NULL;
static char *mtime_test = NULL;
@ -53,8 +55,7 @@ static bool in_background = false;
static rc_hook_t hook_out = 0;
static pid_t service_pid = 0;
static char *prefix = NULL;
/* Pipes for prefixed output */
static bool prefix_locked = false;
extern char **environ;
@ -203,6 +204,9 @@ static void uncoldplug (char *service)
static void cleanup (void)
{
if (prefix_locked)
unlink (PREFIX_LOCK);
/* Flush our buffered output if any */
eclose ();
@ -381,6 +385,22 @@ static bool svc_exec (const char *service, const char *arg1, const char *arg2)
} else if (retval) {
ssize_t nr;
/* Wait until we get a lock */
while (true) {
struct timeval tv;
if (mkfifo (PREFIX_LOCK, 0700) == 0) {
prefix_locked = true;
break;
}
if (errno != EEXIST)
eerror ("mkfifo `%s': %s\n", PREFIX_LOCK, strerror (errno));
tv.tv_sec = 0;
tv.tv_usec = 20000;
select (0, NULL, NULL, NULL, &tv);
}
if (FD_ISSET (stdout_pipes[0], &fds)) {
if ((nr = read (stdout_pipes[0], buffer,
sizeof (buffer))) <= 0)
@ -398,6 +418,10 @@ static bool svc_exec (const char *service, const char *arg1, const char *arg2)
write_prefix (fileno (stderr), buffer, nr,
&stderr_prefix_shown);
}
/* Clear the lock */
unlink (PREFIX_LOCK);
prefix_locked = false;
}
}