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