if (rc < 0) {
if (errno == EINTR)
return 1;
- pb_log("%s: read failed: %s\n", __func__, strerror(errno));
+ pb_log_fn("read failed: %s\n", strerror(errno));
return rc;
}
return rc < 0 ? rc : 0;
}
-static int process_stdout_cb(void *arg)
-{
- struct process_info *procinfo = arg;
- int rc;
-
- rc = process_read_stdout_once(procinfo, NULL);
-
- /* if we're going to signal to the waitset that we're done (ie, non-zero
- * return value), then the waiters will remove us, so we drop the
- * reference */
- if (rc < 0) {
- talloc_unlink(procset, procinfo);
- procinfo->stdout_waiter = NULL;
- rc = -1;
- } else {
- rc = 0;
- }
-
- return rc;
-}
-
-int process_stdout_custom(struct process_info *procinfo, char **line)
+int process_process_stdout(struct process_info *procinfo, char **line)
{
int rc;
rc = write(procset->sigchld_pipe[1], &pid, sizeof(pid));
if (rc != sizeof(pid))
- pb_log("%s: write failed: %s\n", __func__, strerror(errno));
+ pb_log_fn("write failed: %s\n", strerror(errno));
}
static int sigchld_pipe_event(void *arg)
rc = pipe(procset->sigchld_pipe);
if (rc) {
- pb_log("%s: pipe() failed: %s\n", __func__, strerror(errno));
+ pb_log_fn("pipe() failed: %s\n", strerror(errno));
goto err_free;
}
rc = sigaction(SIGCHLD, &sa, NULL);
if (rc) {
- pb_log("%s: sigaction() failed: %s\n", __func__,
+ pb_log_fn("sigaction() failed: %s\n",
strerror(errno));
goto err_remove;
}
pid = fork();
if (pid < 0) {
- pb_log("%s: fork failed: %s\n", __func__, strerror(errno));
+ pb_log_fn("fork failed: %s\n", strerror(errno));
return pid;
}
if (errno == EINTR)
continue;
- pb_log("%s: waitpid failed: %s\n", __func__, strerror(errno));
+ pb_log_fn("waitpid failed: %s\n", strerror(errno));
return rc;
}
return 0;
}
+static int process_stdout_cb(struct process_info *procinfo)
+{
+ return process_process_stdout(procinfo, NULL);
+}
+
int process_run_async(struct process *process)
{
struct process_info *procinfo = get_info(process);
- waiter_cb stdout_cb;
int rc;
rc = process_run_common(procinfo);
return rc;
if (process->keep_stdout) {
- stdout_cb = process->stdout_cb ?: process_stdout_cb;
+ waiter_cb stdout_cb = process->stdout_cb ?:
+ (waiter_cb)process_stdout_cb;
procinfo->stdout_waiter = waiter_register_io(procset->waitset,
procinfo->stdout_pipe[0],
WAIT_IN, stdout_cb, procinfo);