[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Lost] [Patch] [3/4] Service-Manager - Konfiguration



Am Donnerstag, 26. Juni 2008 23.45:29 schrieb Kevin Wolf:
> Am Donnerstag, 26. Juni 2008 22:52:28 schrieb Antoine Kaufmann:
> > Die Konfiguration um den Bootprozess auf servmgr umzustellen
>
> Sieht im großen und ganzen ok aus, aber ich glaube, das meiste davon könnte
> nach root-common.
>
> Außerdem bin ich aus zwei Gründen mit dem mount nicht ganz einverstanden:
> Zum einen gefällt es mir nicht, daß das nur als Abhängigkeit von getterm
> nachgezogen wird, es sollte eher auch in default rein. Zum anderen scheint
> mir nowait nicht das richtige zu sein - servmgr sollte warten, bis mount
> beendet ist.

Ok ich habe jetzt ein waitterminate eingeführt.
Index: trunk/build/root-floppy/config/servmgr/mount/cmd
===================================================================
--- /dev/null
+++ trunk/build/root-floppy/config/servmgr/mount/cmd
@@ -0,0 +1 @@
+/modules/file mount file:/ floppy:/devices/fd0|fat:/
Index: trunk/build/root-floppy/config/servmgr/mount/deps
===================================================================
--- /dev/null
+++ trunk/build/root-floppy/config/servmgr/mount/deps
@@ -0,0 +1 @@
+file
Index: trunk/build/root-hd/config/servmgr/mount/cmd
===================================================================
--- /dev/null
+++ trunk/build/root-hd/config/servmgr/mount/cmd
@@ -0,0 +1 @@
+/modules/file mount file:/ ata:/ata00_p0|next2:/
Index: trunk/build/root-hd/config/servmgr/mount/deps
===================================================================
--- /dev/null
+++ trunk/build/root-hd/config/servmgr/mount/deps
@@ -0,0 +1 @@
+file
Index: trunk/build/root-common/config/servmgr/cmos/cmd
===================================================================
--- /dev/null
+++ trunk/build/root-common/config/servmgr/cmos/cmd
@@ -0,0 +1 @@
+/modules/cmos
Index: trunk/build/root-common/config/servmgr/console/cmd
===================================================================
--- /dev/null
+++ trunk/build/root-common/config/servmgr/console/cmd
@@ -0,0 +1 @@
+/modules/console vterm:/vterm0/out vterm:/vterm0/in
Index: trunk/build/root-common/config/servmgr/console/deps
===================================================================
--- /dev/null
+++ trunk/build/root-common/config/servmgr/console/deps
@@ -0,0 +1 @@
+vterm
Index: trunk/build/root-common/config/servmgr/default/deps
===================================================================
--- /dev/null
+++ trunk/build/root-common/config/servmgr/default/deps
@@ -0,0 +1,3 @@
+getterm1
+rtl8139
+mount
Index: trunk/build/root-common/config/servmgr/file/cmd
===================================================================
--- /dev/null
+++ trunk/build/root-common/config/servmgr/file/cmd
@@ -0,0 +1 @@
+/modules/file
Index: trunk/build/root-common/config/servmgr/getterm1/cmd
===================================================================
--- /dev/null
+++ trunk/build/root-common/config/servmgr/getterm1/cmd
@@ -0,0 +1 @@
+/apps/getterm vterm:/vterm0/in vterm:/vterm0/out vterm:/vterm0/out /apps/sh
Index: trunk/build/root-common/config/servmgr/getterm1/conf
===================================================================
--- /dev/null
+++ trunk/build/root-common/config/servmgr/getterm1/conf
@@ -0,0 +1 @@
+nowait
Index: trunk/build/root-common/config/servmgr/getterm1/deps
===================================================================
--- /dev/null
+++ trunk/build/root-common/config/servmgr/getterm1/deps
@@ -0,0 +1,4 @@
+console
+cmos
+mount
+
Index: trunk/build/root-common/config/servmgr/getterm1/workdir
===================================================================
--- /dev/null
+++ trunk/build/root-common/config/servmgr/getterm1/workdir
@@ -0,0 +1 @@
+file:/
Index: trunk/build/root-common/config/servmgr/kbc/cmd
===================================================================
--- /dev/null
+++ trunk/build/root-common/config/servmgr/kbc/cmd
@@ -0,0 +1 @@
+/modules/kbc
Index: trunk/build/root-common/config/servmgr/mount/conf
===================================================================
--- /dev/null
+++ trunk/build/root-common/config/servmgr/mount/conf
@@ -0,0 +1 @@
+waitterminate
Index: trunk/build/root-common/config/servmgr/pci/cmd
===================================================================
--- /dev/null
+++ trunk/build/root-common/config/servmgr/pci/cmd
@@ -0,0 +1 @@
+/modules/pci
Index: trunk/build/root-common/config/servmgr/rtl8139/cmd
===================================================================
--- /dev/null
+++ trunk/build/root-common/config/servmgr/rtl8139/cmd
@@ -0,0 +1 @@
+/modules/rtl8139
Index: trunk/build/root-common/config/servmgr/rtl8139/deps
===================================================================
--- /dev/null
+++ trunk/build/root-common/config/servmgr/rtl8139/deps
@@ -0,0 +1,2 @@
+pci
+tcpip
Index: trunk/build/root-common/config/servmgr/tcpip/cmd
===================================================================
--- /dev/null
+++ trunk/build/root-common/config/servmgr/tcpip/cmd
@@ -0,0 +1 @@
+/modules/tcpip
Index: trunk/build/root-common/config/servmgr/vterm/cmd
===================================================================
--- /dev/null
+++ trunk/build/root-common/config/servmgr/vterm/cmd
@@ -0,0 +1 @@
+/modules/vterm
Index: trunk/build/root-common/config/servmgr/vterm/deps
===================================================================
--- /dev/null
+++ trunk/build/root-common/config/servmgr/vterm/deps
@@ -0,0 +1 @@
+kbc
Index: trunk/src/modules/servmgr/config.c
===================================================================
--- trunk.orig/src/modules/servmgr/config.c
+++ trunk/src/modules/servmgr/config.c
@@ -126,7 +126,7 @@ static void config_parse_conf(const char
     FILE* f;
     char buffer[33];
 
-    conf_serv->conf.no_wait = FALSE;
+    conf_serv->conf.wait = SERVSTART;
 
     f = fopen(path, "r");
     if (!f) {
@@ -136,7 +136,9 @@ static void config_parse_conf(const char
     // FIXME: Das koennte man noch etwas eleganter loesen ;-)
     while (fgets(buffer, sizeof(buffer), f)) {
         if (!strcmp(buffer, "nowait")) {
-            conf_serv->conf.no_wait = TRUE;
+            conf_serv->conf.wait = NOWAIT;
+        } else if (!strcmp(buffer, "waitterminate")) {
+            conf_serv->conf.wait = TERMINATE;
         }
     }
 }
Index: trunk/src/modules/servmgr/service.c
===================================================================
--- trunk.orig/src/modules/servmgr/service.c
+++ trunk/src/modules/servmgr/service.c
@@ -37,6 +37,7 @@
 #include <syscall.h>
 #include <init.h>
 #include <collections.h>
+#include <sys/wait.h>
 
 #include "servmgr.h"
 
@@ -119,11 +120,15 @@ bool service_start(const char* name)
     }
 
     if (conf_serv->start_cmd) {
-        init_execute(conf_serv->start_cmd);
-        if (!conf_serv->conf.no_wait && !service_wait(name, 10000)) {
+        pid_t pid = init_execute(conf_serv->start_cmd);
+        if ((conf_serv->conf.wait == SERVSTART) && !service_wait(name, 10000)) {
             printf("servmgr: Timeout beim Warten auf den Service %s\n", name);
             return FALSE;
+        } else if (conf_serv->conf.wait == TERMINATE) {
+            int status;
+            waitpid(pid, &status, 0);
         }
     }
+
     return TRUE;
 }
Index: trunk/src/modules/servmgr/servmgr.h
===================================================================
--- trunk.orig/src/modules/servmgr/servmgr.h
+++ trunk/src/modules/servmgr/servmgr.h
@@ -45,7 +45,11 @@ struct config_service {
     list_t* deps;
 
     struct {
-        bool no_wait;
+        enum {
+            SERVSTART,
+            TERMINATE,
+            NOWAIT
+        } wait;
     } conf;
 };