From cfd2812b7a1268fb92db634d72cdaa38b1d8d269 Mon Sep 17 00:00:00 2001 From: Timo Kokkonen Date: Sat, 28 Nov 2020 15:06:02 +0200 Subject: [PATCH] bmed: Exit all threads if socket creation fails. If we fail to create the listening socket, the main thread should not be left running without the listener. Signed-off-by: Timo Kokkonen --- bmed.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/bmed.c b/bmed.c index c00cfbb..d1e2fee 100644 --- a/bmed.c +++ b/bmed.c @@ -43,6 +43,8 @@ struct event_handler { char *name; }; +int exit_all = 0; + #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0])) #define min(a, b) ((a) < (b) ? (a) : (b)) #define max(a, b) ((a) > (b) ? (a) : (b)) @@ -251,7 +253,7 @@ static void *event_handler(void *arg) sockfd = socket(AF_INET, SOCK_STREAM | SOCK_NONBLOCK, 0); if (sockfd < 0) { printf("Failed to create socket: %m\n"); - return NULL; + goto out; } addr.sin_family = AF_INET; @@ -294,7 +296,7 @@ static void *event_handler(void *arg) if (ret == -1) { if (errno != EINTR) { printf("epoll_wait: %m\n"); - return NULL; + goto close_socket; } continue; @@ -317,6 +319,8 @@ static void *event_handler(void *arg) close_socket: close(sockfd); +out: + exit_all = 1; return NULL; } @@ -431,6 +435,10 @@ static int stream_sensor_data_forced_mode(struct bme280 *bme) struct tm *now; time_t t; + ret = 0; + if (exit_all) + break; + ret = bme280_set_sensor_mode(BME280_FORCED_MODE, dev); if (ret) { fprintf(stderr, "Failed to set sensor mode (code %+d).", ret); -- 2.45.0