mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-04 13:30:12 -05:00
main: handle execv failure
Log an error, exit daemon
This commit is contained in:
parent
ffbb74c4af
commit
aa36a72427
3 changed files with 13 additions and 4 deletions
|
|
@ -28,6 +28,7 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
|
#include <sys/wait.h>
|
||||||
|
|
||||||
#include <pipewire/impl.h>
|
#include <pipewire/impl.h>
|
||||||
|
|
||||||
|
|
@ -216,16 +217,23 @@ no_mem:
|
||||||
static int
|
static int
|
||||||
execute_command_exec(struct pw_command *command, struct pw_context *context, char **err)
|
execute_command_exec(struct pw_command *command, struct pw_context *context, char **err)
|
||||||
{
|
{
|
||||||
int pid;
|
int pid, res;
|
||||||
|
|
||||||
pid = fork();
|
pid = fork();
|
||||||
|
|
||||||
if (pid == 0) {
|
if (pid == 0) {
|
||||||
pw_log_info("exec %s", command->args[1]);
|
pw_log_info("exec %s", command->args[1]);
|
||||||
execv(command->args[1], command->args);
|
res = execv(command->args[1], command->args);
|
||||||
|
if (res == -1) {
|
||||||
|
res = -errno;
|
||||||
|
asprintf(err, "'%s': %m", command->args[1]);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
pw_log_info("exec got pid %d", pid);
|
int status;
|
||||||
|
res = waitpid(pid, &status, WNOHANG);
|
||||||
|
pw_log_info("exec got pid %d res:%d status:%d", pid, res, status);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -200,7 +200,7 @@ int pw_daemon_config_run_commands(struct pw_daemon_config *config, struct pw_con
|
||||||
|
|
||||||
spa_list_for_each(command, &config->commands, link) {
|
spa_list_for_each(command, &config->commands, link) {
|
||||||
if ((ret = pw_command_run(command, context, &err)) < 0) {
|
if ((ret = pw_command_run(command, context, &err)) < 0) {
|
||||||
pw_log_warn("could not run command %s: %s", command->args[0], err);
|
pw_log_error("could not run command %s: %s", command->args[0], err);
|
||||||
free(err);
|
free(err);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -120,6 +120,7 @@ int main(int argc, char *argv[])
|
||||||
|
|
||||||
if ((res = pw_daemon_config_run_commands(config, context)) < 0) {
|
if ((res = pw_daemon_config_run_commands(config, context)) < 0) {
|
||||||
pw_log_error("failed to run config commands: %s", spa_strerror(res));
|
pw_log_error("failed to run config commands: %s", spa_strerror(res));
|
||||||
|
pw_main_loop_quit(loop);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue