diff options
author | Paul Elder <paul.elder@ideasonboard.com> | 2019-07-12 17:20:34 +0900 |
---|---|---|
committer | Paul Elder <paul.elder@ideasonboard.com> | 2019-07-12 17:37:44 +0900 |
commit | df23ab95f3d72c8a5eda7e6b831f7ee62e9394c4 (patch) | |
tree | a6d86378173bfed216c9e4952729acecddd2fc44 /src | |
parent | 2d5b3a236ebe092dda8a67a721cc96825822628b (diff) |
libcamera: process: fix compilation on Chromium OS
Commit 3d20beca6616 ("libcamera: Add Process and ProcessManager
classes") causes the build to fail in the Chromium OS build environment,
because the return values of some function calls marked with the
__warn_unused_result__ attribute are ignored. Fix this.
Fixes: 3d20beca6616 ("libcamera: Add Process and ProcessManager classes")
Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/libcamera/process.cpp | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/libcamera/process.cpp b/src/libcamera/process.cpp index 9d8829d0..aee33735 100644 --- a/src/libcamera/process.cpp +++ b/src/libcamera/process.cpp @@ -69,7 +69,9 @@ namespace { void sigact(int signal, siginfo_t *info, void *ucontext) { char data = 0; - write(ProcessManager::instance()->writePipe(), &data, sizeof(data)); + /* We're in a signal handler so we can't log any message, + * and we need to continue anyway. */ + (void)write(ProcessManager::instance()->writePipe(), &data, sizeof(data)); const struct sigaction &oldsa = ProcessManager::instance()->oldsa(); if (oldsa.sa_flags & SA_SIGINFO) { @@ -85,7 +87,11 @@ void sigact(int signal, siginfo_t *info, void *ucontext) void ProcessManager::sighandler(EventNotifier *notifier) { char data; - read(pipe_[0], &data, sizeof(data)); + if (read(pipe_[0], &data, sizeof(data))) { + LOG(Process, Error) + << "Failed to read byte from signal handler pipe"; + return; + } for (auto it = processes_.begin(); it != processes_.end(); ) { Process *process = *it; @@ -128,7 +134,9 @@ ProcessManager::ProcessManager() sigaction(SIGCHLD, &sa, NULL); - pipe2(pipe_, O_CLOEXEC | O_DIRECT | O_NONBLOCK); + if (pipe2(pipe_, O_CLOEXEC | O_DIRECT | O_NONBLOCK)) + LOG(Process, Fatal) + << "Failed to initialize pipe for signal handling"; sigEvent_ = new EventNotifier(pipe_[0], EventNotifier::Read); sigEvent_->activated.connect(this, &ProcessManager::sighandler); } |