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);
#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) { \
}
void *
-rumprun(int (*mainfun)(int, char *[]), int argc, char *argv[])
+rumprun(int flags, int (*mainfun)(int, char *[]), int argc, char *argv[])
{
struct rumprunner *rr;
}
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);