Okay, I'll rewrite it.
However: Is it polling for the existence of the tty device that is
unacceptable (would a solution using uloop_timeout_set() be okay?), or
would I need to process hotplug events from the kernel?
Thanks,
Owen
On 15-01-15 10:31 PM, John Crispin wrote:
nack, using magic delays is a no go
On 16/01/2015 04:15, Owen Kirby wrote:
If a process with a tty is specified in inittab, delay the worker
process until the tty exists.
This allows starting consoles with terminals that get delayed until
after procd is reads inittab,
and it also allows hotplugging USB-to-serial adapters attached long
after booting.
Signed-off-by: Owen Kirby <o...@exegin.com>
---
inittab.c | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)
diff --git a/inittab.c b/inittab.c
index 623103d..73c113f 100644
--- a/inittab.c
+++ b/inittab.c
@@ -99,9 +99,15 @@ static void fork_worker(struct init_action *a)
if (!a->proc.pid) {
p = setsid();
- fd = dev_open(a->id);
- if (fd != -1)
- {
+ if (a->id) {
+ struct timespec tm;
+ tm.tv_sec = a->respawn / 1000;
+ tm.tv_nsec = (a->respawn % 1000) * 1000000;
+
+ while ((fd = dev_open(a->id)) == -1)
+ if (nanosleep(&tm, NULL) == -1)
+ exit(-1);
+
dup2(fd, STDIN_FILENO);
dup2(fd, STDOUT_FILENO);
dup2(fd, STDERR_FILENO);
@@ -157,7 +163,7 @@ static void askfirst(struct init_action *a)
{
int i;
- if (!dev_exist(a->id) || (console && !strcmp(console, a->id))) {
+ if (console && !strcmp(console, a->id)) {
DEBUG(4, "Skipping %s\n", a->id);
return;
}
_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel