From 9555d8ac457a79be3025ed9849afaee1c12646a9 Mon Sep 17 00:00:00 2001 From: "ruben.otto" <ruben.otto@informatik.hs-fulda.de> Date: Fri, 14 Feb 2025 01:15:13 +0100 Subject: [PATCH] feat: terminate clients if pipe is closed --- clients/cpu_temp/src/cpu_temp.c | 9 ++++++++- clients/dummy/src/dummy.c | 9 ++++++++- common/src/userspace_comm.c | 5 ++++- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/clients/cpu_temp/src/cpu_temp.c b/clients/cpu_temp/src/cpu_temp.c index 20ed07a..a935002 100644 --- a/clients/cpu_temp/src/cpu_temp.c +++ b/clients/cpu_temp/src/cpu_temp.c @@ -1,5 +1,6 @@ #include "../../../common/include/measurement.h" #include "../../../common/include/userspace_comm.h" +#include <errno.h> #include <fcntl.h> #include <stdio.h> #include <stdlib.h> @@ -44,7 +45,13 @@ int main(int argc, char *argv[]) { .id = atoi(argv[1]), }; - send_userspace_message(&userspace_send_handle, measurement); + if (send_userspace_message(&userspace_send_handle, measurement) == -1) { + if (errno == EIDRM || errno == EINVAL) { + printf("Message queue got closed\n"); + break; + } + perror("Failed to send message"); + } usleep(sleep_ms * 1000); } diff --git a/clients/dummy/src/dummy.c b/clients/dummy/src/dummy.c index e273cca..01581cb 100644 --- a/clients/dummy/src/dummy.c +++ b/clients/dummy/src/dummy.c @@ -1,5 +1,6 @@ #include "../../../common/include/measurement.h" #include "../../../common/include/userspace_comm.h" +#include <errno.h> #include <fcntl.h> #include <math.h> #include <stdio.h> @@ -31,7 +32,13 @@ int main(int argc, char *argv[]) { .id = atoi(argv[1]), }; - send_userspace_message(&userspace_send_handle, measurement); + if (send_userspace_message(&userspace_send_handle, measurement) == -1) { + if (errno == EIDRM || errno == EINVAL) { + printf("Message queue got closed\n"); + break; + } + perror("Failed to send message"); + } step += 0.01; if (step >= 2.0 * M_PI) { diff --git a/common/src/userspace_comm.c b/common/src/userspace_comm.c index 3468a50..7acbc39 100644 --- a/common/src/userspace_comm.c +++ b/common/src/userspace_comm.c @@ -27,8 +27,11 @@ int send_userspace_message(userspace_send_handle_t *handle, .measurement = measurement, }; - msgsnd(handle->msg_queue_id, &message_queue_message, sizeof(measurement_t), + int read = msgsnd(handle->msg_queue_id, &message_queue_message, sizeof(measurement_t), 0); + if (read == -1) { + return -1; + } return 0; } -- GitLab