]> git.itanic.dy.fi Git - BME280_driver/commitdiff
bmed: Exit all threads if socket creation fails.
authorTimo Kokkonen <timo.t.kokkonen@iki.fi>
Sat, 28 Nov 2020 13:06:02 +0000 (15:06 +0200)
committerTimo Kokkonen <timo.t.kokkonen@iki.fi>
Sat, 28 Nov 2020 13:06:02 +0000 (15:06 +0200)
If we fail to create the listening socket, the main thread should not
be left running without the listener.

Signed-off-by: Timo Kokkonen <timo.t.kokkonen@iki.fi>
bmed.c

diff --git a/bmed.c b/bmed.c
index c00cfbbe5ba8a5ae8117da84c647aa32d8b0f19c..d1e2feeb4c480d8db1ede9669cb0865be9acbdf6 100644 (file)
--- 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);