projects
/
petitboot
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
discover: Handle incoming configuration messages
[petitboot]
/
lib
/
process
/
process.c
diff --git
a/lib/process/process.c
b/lib/process/process.c
index e1a158b0799519e391aa310228a3c8670cad7e47..1a16fb6312b4fb74dc8cc753806009e939bd7691 100644
(file)
--- a/
lib/process/process.c
+++ b/
lib/process/process.c
@@
-29,6
+29,7
@@
struct procset {
struct list async_list;
int sigchld_pipe[2];
struct waiter *sigchld_waiter;
struct list async_list;
int sigchld_pipe[2];
struct waiter *sigchld_waiter;
+ bool dry_run;
};
/* Internal data type for process handling
};
/* Internal data type for process handling
@@
-245,13
+246,14
@@
static int process_fini(void *p)
return 0;
}
return 0;
}
-struct procset *process_init(void *ctx, struct waitset *set)
+struct procset *process_init(void *ctx, struct waitset *set
, bool dry_run
)
{
struct sigaction sa;
int rc;
procset = talloc(ctx, struct procset);
procset->waitset = set;
{
struct sigaction sa;
int rc;
procset = talloc(ctx, struct procset);
procset->waitset = set;
+ procset->dry_run = dry_run;
list_init(&procset->async_list);
rc = pipe(procset->sigchld_pipe);
list_init(&procset->async_list);
rc = pipe(procset->sigchld_pipe);
@@
-330,6
+332,8
@@
static int process_run_common(struct process_info *procinfo)
if (pid == 0) {
process_setup_stdout_child(procinfo);
if (pid == 0) {
process_setup_stdout_child(procinfo);
+ if (procset->dry_run)
+ exit(EXIT_SUCCESS);
execvp(process->path, (char * const *)process->argv);
exit(EXIT_FAILURE);
}
execvp(process->path, (char * const *)process->argv);
exit(EXIT_FAILURE);
}
@@
-351,8
+355,13
@@
int process_run_sync(struct process *process)
process_read_stdout(procinfo);
process_read_stdout(procinfo);
- rc = waitpid(process->pid, &process->exit_status, 0);
- if (rc == -1) {
+ for (;;) {
+ rc = waitpid(process->pid, &process->exit_status, 0);
+ if (rc >= 0)
+ break;
+ if (errno == EINTR)
+ continue;
+
pb_log("%s: waitpid failed: %s\n", __func__, strerror(errno));
return rc;
}
pb_log("%s: waitpid failed: %s\n", __func__, strerror(errno));
return rc;
}