summaryrefslogtreecommitdiff
path: root/src/libcamera/process.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libcamera/process.cpp')
-rw-r--r--src/libcamera/process.cpp14
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);
}