From: Timo Kokkonen Date: Sat, 28 Nov 2020 13:06:02 +0000 (+0200) Subject: bmed: Exit all threads if socket creation fails. X-Git-Url: http://git.itanic.dy.fi/?p=BME280_driver;a=commitdiff_plain;h=cfd2812b7a1268fb92db634d72cdaa38b1d8d269 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 --- 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);