]> xenbits.xensource.com Git - osstest/rumprun.git/commitdiff
Support backgrounded rc execution.
authorAntti Kantee <pooka@iki.fi>
Tue, 20 Oct 2015 13:06:42 +0000 (13:06 +0000)
committerAntti Kantee <pooka@iki.fi>
Tue, 20 Oct 2015 13:06:42 +0000 (13:06 +0000)
include/rumprun-base/rumprun.h
lib/librumprun_base/main.c
lib/librumprun_base/rumprun.c

index d9a98f229a80214489d4752c53e386f890df5bae..0c6624d2d6182e95125c9bf78ee0a1ee125472c4 100644 (file)
@@ -31,7 +31,7 @@ mainlike_fn main;
 
 void   rumprun_boot(char *);
 
-void * rumprun(mainlike_fn, int, char *[]);
+void * rumprun(int, mainlike_fn, int, char *[]);
 int    rumprun_wait(void *);
 void * rumprun_get_finished(void);
 
index a2fd7c0d709026bd7c73db2a84979b47230d3313..9f5bd0a40e356b5e4a824cefa7a9cc3d86c4c465 100644 (file)
@@ -47,7 +47,7 @@ mainlike_fn rumpbake_main8;
 #define RUNMAIN(i)                                                     \
        if (rumpbake_main##i == rumprun_notmain)                        \
                break;                                                  \
-       rumprun(rumpbake_main##i,                                       \
+       rumprun(rre->rre_flags, rumpbake_main##i,                       \
            rre->rre_argc, rre->rre_argv);                              \
        rre = TAILQ_NEXT(rre, rre_entries);                             \
        if (rre == NULL) {                                              \
index d0666810ee2dd6549b748b9d763bb6aa70bbbdf6..bb659e900e16175ba44ff15bba114f1049415c4f 100644 (file)
@@ -193,7 +193,7 @@ mainbouncer(void *arg)
 }
 
 void *
-rumprun(int (*mainfun)(int, char *[]), int argc, char *argv[])
+rumprun(int flags, int (*mainfun)(int, char *[]), int argc, char *argv[])
 {
        struct rumprunner *rr;
 
@@ -212,6 +212,12 @@ rumprun(int (*mainfun)(int, char *[]), int argc, char *argv[])
        }
        LIST_INSERT_HEAD(&rumprunners, rr, rr_entries);
 
+       /* async launch? */
+       printf("flags is %x\n", flags);
+       if ((flags & (RUMPRUN_EXEC_BACKGROUND | RUMPRUN_EXEC_PIPE)) != 0) {
+               return rr;
+       }
+
        pthread_mutex_lock(&w_mtx);
        while ((rr->rr_flags & (RUMPRUNNER_DONE|RUMPRUNNER_DAEMON)) == 0) {
                pthread_cond_wait(&w_cv, &w_mtx);