diff --git a/clients/cpu_temp/src/cpu_temp.c b/clients/cpu_temp/src/cpu_temp.c index 20ed07af7f9582e19d5525f7920cac098f9979d9..a93500245045b349e4be2ea363d673618a68778f 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 e273cca6781b4b3ecd3cc6862be913bddb59b911..01581cb88327f4821b621a03a62b3c4c23214ff7 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 3468a505835f2a986587db4eb34ead7ad6d1b86f..7acbc39fe1e2cd07bc4b3f26f83d52ad93a74d71 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; }