]> git.meshlink.io Git - meshlink/commitdiff
Fix warnings and missing mutex/cond initialization in the test suite.
authorGuus Sliepen <guus@meshlink.io>
Fri, 12 Jun 2020 22:41:47 +0000 (00:41 +0200)
committerGuus Sliepen <guus@meshlink.io>
Fri, 12 Jun 2020 22:41:47 +0000 (00:41 +0200)
20 files changed:
test/basicpp.cpp
test/blacklist.c
test/channels-aio-cornercases.c
test/channels-aio-fd.c
test/channels-aio.c
test/channels-cornercases.c
test/channels-failure.c
test/channels-fork.c
test/channels-udp.c
test/channels.c
test/duplicate.c
test/echo-fork.c
test/get-all-nodes.c
test/import-export.c
test/invite-join.c
test/stream.c
test/trio.c
test/trio2.c
test/utils.c
test/utils.h

index 2f4e5c84a12d727349f751540ac33a60d26c160d..c0550ecf71027e07f1de4cb5f751138c3536419d 100644 (file)
@@ -9,7 +9,7 @@
 
 using namespace std;
 
-int main() {
+int main(void) {
        assert(meshlink::destroy("basicpp_conf"));
 
        // Open a new meshlink instance.
index 8b081963bf2089fc7c7e7f0f4dcad1806c5bcdca..1f5cd605e936fafb9d7c076c68c6de8d34f72f89 100644 (file)
@@ -45,6 +45,10 @@ static void baz_status_cb(meshlink_handle_t *mesh, meshlink_node_t *node, bool r
 }
 
 int main(void) {
+       init_sync_flag(&bar_connected);
+       init_sync_flag(&bar_disconnected);
+       init_sync_flag(&baz_connected);
+
        meshlink_set_log_cb(NULL, MESHLINK_DEBUG, log_cb);
 
        // Create three instances.
index 0640c7df6e6de513bedea610f2f4c8d282f0d3a9..dba4de51e11cc3dde228c20fe683f16694a3b84f 100644 (file)
@@ -27,8 +27,6 @@ struct channel_info {
        struct aio_info aio_infos[2];
 };
 
-static size_t b_received_len;
-static struct timeval b_received_tv;
 static struct sync_flag b_received_flag;
 
 static void aio_cb(meshlink_handle_t *mesh, meshlink_channel_t *channel, const void *data, size_t len, void *priv) {
@@ -66,14 +64,14 @@ static bool accept_cb(meshlink_handle_t *mesh, meshlink_channel_t *channel, uint
        switch(port) {
        case 1:
        case 3:
-               meshlink_channel_aio_receive(mesh, channel, info->data, size / 4, aio_cb, &info->aio_infos[0]);
-               meshlink_channel_aio_receive(mesh, channel, info->data + size / 4, size - size / 4, aio_cb_close, &info->aio_infos[1]);
+               assert(meshlink_channel_aio_receive(mesh, channel, info->data, size / 4, aio_cb, &info->aio_infos[0]));
+               assert(meshlink_channel_aio_receive(mesh, channel, info->data + size / 4, size - size / 4, aio_cb_close, &info->aio_infos[1]));
                break;
 
        case 2:
        case 4:
-               meshlink_channel_aio_receive(mesh, channel, info->data, size / 4, aio_cb_close, &info->aio_infos[0]);
-               meshlink_channel_aio_receive(mesh, channel, info->data + size / 4, size - size / 4, aio_cb, &info->aio_infos[1]);
+               assert(meshlink_channel_aio_receive(mesh, channel, info->data, size / 4, aio_cb_close, &info->aio_infos[0]));
+               assert(meshlink_channel_aio_receive(mesh, channel, info->data + size / 4, size - size / 4, aio_cb, &info->aio_infos[1]));
                set_sync_flag(&info->aio_infos[1].flag, true);
                break;
 
@@ -84,9 +82,8 @@ static bool accept_cb(meshlink_handle_t *mesh, meshlink_channel_t *channel, uint
        return true;
 }
 
-int main(int argc, char *argv[]) {
-       (void)argc;
-       (void)argv;
+int main(void) {
+       init_sync_flag(&b_received_flag);
 
        meshlink_set_log_cb(NULL, MESHLINK_WARNING, log_cb);
 
@@ -107,6 +104,11 @@ int main(int argc, char *argv[]) {
        memset(out_infos, 0, sizeof(out_infos));
 
        for(size_t i = 0; i < nchannels; i++) {
+               init_sync_flag(&in_infos[i].aio_infos[0].flag);
+               init_sync_flag(&in_infos[i].aio_infos[1].flag);
+               init_sync_flag(&out_infos[i].aio_infos[0].flag);
+               init_sync_flag(&out_infos[i].aio_infos[1].flag);
+
                in_infos[i].data = malloc(size);
                assert(in_infos[i].data);
                out_infos[i].data = outdata;
index 40fcf7fc605608187b98124a38091ece35be0c89..2a32c38acd29f38aae5e363a4cfe428dc2cd5ec5 100644 (file)
@@ -65,10 +65,7 @@ static bool accept_cb(meshlink_handle_t *mesh, meshlink_channel_t *channel, uint
        return true;
 }
 
-int main(int argc, char *argv[]) {
-       (void)argc;
-       (void)argv;
-
+int main(void) {
        meshlink_set_log_cb(NULL, MESHLINK_WARNING, log_cb);
 
        // Prepare file
@@ -93,6 +90,11 @@ int main(int argc, char *argv[]) {
        memset(out_infos, 0, sizeof(out_infos));
 
        for(size_t i = 0; i < nchannels; i++) {
+               init_sync_flag(&in_infos[i].aio_infos[0].flag);
+               init_sync_flag(&in_infos[i].aio_infos[1].flag);
+               init_sync_flag(&out_infos[i].aio_infos[0].flag);
+               init_sync_flag(&out_infos[i].aio_infos[1].flag);
+
                char filename[PATH_MAX];
                snprintf(filename, sizeof(filename), "channels_aio_fd.out%d", (int)i);
                in_infos[i].file = fopen(filename, "w");
index a0ce57156516185fad5a1ab5a50d8c7820ee1838..c43f1da1edac717ab1217e7e4741703f7a40cc50 100644 (file)
@@ -86,9 +86,8 @@ static bool accept_cb(meshlink_handle_t *mesh, meshlink_channel_t *channel, uint
        return true;
 }
 
-int main(int argc, char *argv[]) {
-       (void)argc;
-       (void)argv;
+int main(void) {
+       init_sync_flag(&b_received_flag);
 
        meshlink_set_log_cb(NULL, MESHLINK_WARNING, log_cb);
 
@@ -110,6 +109,11 @@ int main(int argc, char *argv[]) {
        memset(out_infos, 0, sizeof(out_infos));
 
        for(size_t i = 0; i < nchannels; i++) {
+               init_sync_flag(&in_infos[i].aio_infos[0].flag);
+               init_sync_flag(&in_infos[i].aio_infos[1].flag);
+               init_sync_flag(&out_infos[i].aio_infos[0].flag);
+               init_sync_flag(&out_infos[i].aio_infos[1].flag);
+
                in_infos[i].data = malloc(size);
                assert(in_infos[i].data);
                out_infos[i].data = outdata;
index 3b605bb53ae4143381a14d0f8deaddb880cfb1d2..b8534030086f095d8739efb9418154d7f2184f17 100644 (file)
@@ -96,6 +96,7 @@ int main(void) {
        assert(nb);
 
        struct sync_flag channel_opened = {.flag = false};
+       init_sync_flag(&channel_opened);
 
        meshlink_channel_t *channel = meshlink_channel_open(a, nb, 7, a_receive_cb, &channel_opened, 0);
        assert(channel);
@@ -136,6 +137,7 @@ int main(void) {
        // Send a message to b
 
        struct sync_flag channel_closed = {.flag = false};
+       init_sync_flag(&channel_closed);
        channel->priv = &channel_closed;
 
        assert(meshlink_channel_send(a, channel, "Hello", 5) == 5);
@@ -146,6 +148,7 @@ int main(void) {
        // Try to create a second channel
 
        struct sync_flag channel_polled = {.flag = false};
+       init_sync_flag(&channel_polled);
 
        meshlink_channel_t *channel2 = meshlink_channel_open(a, nb, 7, a_receive_cb, &channel_polled, 0);
        assert(channel2);
index e9b4c7ba4755280710724e72f6fa276c95218b53..defdca9676bdcd664f3c66cbe8645f9fe16ff20f 100644 (file)
@@ -44,6 +44,9 @@ static void receive_cb(meshlink_handle_t *mesh, meshlink_channel_t *channel, con
 }
 
 int main(void) {
+       init_sync_flag(&poll_flag);
+       init_sync_flag(&receive_flag);
+
        meshlink_set_log_cb(NULL, MESHLINK_DEBUG, log_cb);
 
        // Open two meshlink instances.
index 483f430b88bee52be1aa82421e81538877f5786b..38ae9b19e19bdfbf0990c15e4c96d4d7e1d33544 100644 (file)
@@ -187,10 +187,14 @@ static void alarm_handler(int sig) {
 }
 
 int main(void) {
+       init_sync_flag(&bar_responded);
+       init_sync_flag(&foo_connected);
+       init_sync_flag(&foo_gone);
+
        int fda[2], fdb[2];
 
-       assert(pipe2(fda, 0) != -1);
-       assert(pipe2(fdb, 0) != -1);
+       assert(pipe(fda) != -1);
+       assert(pipe(fdb) != -1);
 
        if(!fork()) {
                return main2(fdb[0], fda[1]);
index 4e628c017fb77efbd31b2a0d243d46a47a396d65..40d5605de17f1502f1caeb6b23639811ab6a74fb 100644 (file)
@@ -101,6 +101,9 @@ static bool accept_cb(meshlink_handle_t *mesh, meshlink_channel_t *channel, uint
 }
 
 int main(void) {
+       init_sync_flag(&accept_flag);
+       init_sync_flag(&close_flag);
+
        meshlink_set_log_cb(NULL, MESHLINK_WARNING, log_cb);
 
        // Open four new meshlink instance, the server and three peers.
@@ -164,7 +167,7 @@ int main(void) {
                }
 
                const struct timespec req = {0, 2000000};
-               clock_nanosleep(CLOCK_MONOTONIC, 0, &req, NULL);
+               nanosleep(&req, NULL);
        }
 
        // Let the clients close the channels
index 3dbbaa7b08f025220518d74028a77369062be094..fb8cdb0afd22fdefaf1bd61ac02bb2ec32d37728 100644 (file)
@@ -76,6 +76,8 @@ static void poll_cb(meshlink_handle_t *mesh, meshlink_channel_t *channel, size_t
 }
 
 int main(void) {
+       init_sync_flag(&b_responded);
+
        meshlink_set_log_cb(NULL, MESHLINK_DEBUG, log_cb);
 
        // Open two new meshlink instance.
index ed3e75683822508a54a553cb445bd124daac9817..df9f86be1afd704fe16c45b36b07f53df34f7fc5 100644 (file)
@@ -19,6 +19,8 @@ static void handle_duplicate(meshlink_handle_t *mesh, meshlink_node_t *node) {
 }
 
 int main(void) {
+       init_sync_flag(&duplicate_detected);
+
        meshlink_set_log_cb(NULL, MESHLINK_DEBUG, log_cb);
 
        // Open meshlink instances
index 0096c9e0fb4adc5c8611a5bccd366d7863bd2445..7fe0ab843fdcc6c9fde3cb8ba4c40bf8a8bf712d 100644 (file)
@@ -175,6 +175,10 @@ static int main2(void) {
 
 
 int main(void) {
+       init_sync_flag(&a_started);
+       init_sync_flag(&a_stopped);
+       init_sync_flag(&b_responded);
+
        meshlink_set_log_cb(NULL, MESHLINK_WARNING, log_cb);
 
        // Initialize and exchange configuration.
index 815dc7df328376254f002c7b1c37918deb0c0e96..152184c67a7a4092a03bfdf57481c7cb575f80f4 100644 (file)
@@ -24,6 +24,8 @@ static void status_cb(meshlink_handle_t *mesh, meshlink_node_t *node, bool reach
 }
 
 int main(void) {
+       init_sync_flag(&bar_reachable);
+
        struct meshlink_node **nodes = NULL;
        size_t nnodes = 0;
 
index 599e4c1422bf004adde7097a1b54b9f0f15fcb24..15e213447eedd211f643aba6a2608e9939db7aef 100644 (file)
@@ -23,6 +23,8 @@ static void status_cb(meshlink_handle_t *mesh, meshlink_node_t *node, bool reach
 }
 
 int main(void) {
+       init_sync_flag(&bar_reachable);
+
        meshlink_set_log_cb(NULL, MESHLINK_DEBUG, log_cb);
 
        // Open two new meshlink instance.
index 85fb4931d05797ab52cdea8e9fb335e412d1f1ff..cb1d6aa6faeed23e2701fd7b17f5368f17364118 100644 (file)
@@ -23,6 +23,8 @@ static void status_cb(meshlink_handle_t *mesh, meshlink_node_t *node, bool reach
 }
 
 int main(void) {
+       init_sync_flag(&baz_reachable);
+
        meshlink_set_log_cb(NULL, MESHLINK_DEBUG, log_cb);
 
        assert(meshlink_destroy("invite_join_conf.1"));
index 378809cc509865e234179df6364342387786ddda..25aaf2f58364c6b5be26a34713aca63c90d3a709 100644 (file)
@@ -73,6 +73,7 @@ int main(int argc, char *argv[]) {
                        char *p = buf;
 
                        memcpy(buf, &now, sizeof(now));
+                       clock_gettime(CLOCK_REALTIME, &now);
 
                        for(uint64_t *q = (uint64_t *)(buf + sizeof(now)); (char *)q < buf + framesize; q++) {
                                *q = counter++;
@@ -82,23 +83,22 @@ int main(int argc, char *argv[]) {
                                ssize_t sent = write(1, p, tosend);
 
                                if(sent <= 0) {
-                                       err(1, "write(1, %p, %zu)", p, tosend);
+                                       err(1, "write(1, %p, %zu)", (void *)p, tosend);
                                }
 
                                tosend -= sent;
                                p += sent;
                        }
 
-                       next = now;
-                       next.tv_nsec += interval;
+                       next.tv_sec = 0;
+                       next.tv_nsec = interval;
 
                        while(next.tv_nsec >= 1000000000) {
                                next.tv_nsec -= 1000000000;
                                next.tv_sec++;
                        }
 
-                       clock_nanosleep(CLOCK_REALTIME, TIMER_ABSTIME, &next, NULL);
-                       now = next;
+                       nanosleep(&next, NULL);
                        total -= framesize;
                } else {
                        struct timespec *ts = (struct timespec *)buf;
@@ -109,7 +109,7 @@ int main(int argc, char *argv[]) {
                                ssize_t result = read(0, p, toread);
 
                                if(result <= 0) {
-                                       err(1, "read(1, %p, %zu)", p, toread);
+                                       err(1, "read(1, %p, %zu)", (void *)p, toread);
                                }
 
                                toread -= result;
@@ -124,7 +124,7 @@ int main(int argc, char *argv[]) {
                                ssize_t result = read(0, p, toread);
 
                                if(result <= 0) {
-                                       err(1, "read(1, %p, %zu)", p, toread);
+                                       err(1, "read(1, %p, %zu)", (void *)p, toread);
                                }
 
                                toread -= result;
@@ -137,7 +137,7 @@ int main(int argc, char *argv[]) {
                                if(*q != counter++) {
                                        uint64_t offset = (counter - 1) * 8;
                                        offset += ((counter * 8) / (framesize - sizeof(now))) * sizeof(now);
-                                       err(1, "verification failed at offset %lu", offset);
+                                       err(1, "verification failed at offset %lu", (unsigned long)offset);
                                }
                        }
 
index 478dd28ee56fd768fb92c6af777c91da8ebd166f..bdb3904e37e4540faf734e4bd5c7c145f3eddd35 100644 (file)
@@ -48,6 +48,10 @@ static void baz_status_cb(meshlink_handle_t *mesh, meshlink_node_t *node, bool r
 }
 
 int main(void) {
+       init_sync_flag(&received);
+       init_sync_flag(&bar_learned_baz);
+       init_sync_flag(&baz_learned_bar);
+
        meshlink_set_log_cb(NULL, MESHLINK_DEBUG, log_cb);
 
        // Create three instances.
index 328c6a95961a4c95153f3f859d68e8d10afc4ba6..dc57679e706c9ac1ceb8829bc37b0a3b661e87d9 100644 (file)
@@ -48,6 +48,10 @@ static void baz_status_cb(meshlink_handle_t *mesh, meshlink_node_t *node, bool r
 }
 
 int main(void) {
+       init_sync_flag(&received);
+       init_sync_flag(&bar_learned_baz);
+       init_sync_flag(&baz_learned_bar);
+
        meshlink_set_log_cb(NULL, MESHLINK_DEBUG, log_cb);
 
        // Create three instances.
index d4ba6b6d8cbe530c8d2ff519dc373c765b1d210e..c526ff0ddbcd7d17ecbf59305f18a7d05544484a 100644 (file)
 
 #include "utils.h"
 
+void init_sync_flag(struct sync_flag *s) {
+       assert(pthread_mutex_init(&s->mutex, NULL) == 0);
+       assert(pthread_cond_init(&s->cond, NULL) == 0);
+}
+
 void set_sync_flag(struct sync_flag *s, bool value) {
-       pthread_mutex_lock(&s->mutex);
+       assert(pthread_mutex_lock(&s->mutex) == 0);
        s->flag = value;
-       pthread_cond_broadcast(&s->cond);
-       pthread_mutex_unlock(&s->mutex);
+       assert(pthread_cond_broadcast(&s->cond) == 0);
+       assert(pthread_mutex_unlock(&s->mutex) == 0);
 }
 
 bool check_sync_flag(struct sync_flag *s) {
        bool flag;
-       pthread_mutex_lock(&s->mutex);
+       assert(pthread_mutex_lock(&s->mutex) == 0);
        flag = s->flag;
-       pthread_mutex_unlock(&s->mutex);
+       assert(pthread_mutex_unlock(&s->mutex) == 0);
        return flag;
 }
 
@@ -33,7 +38,7 @@ bool wait_sync_flag(struct sync_flag *s, int seconds) {
        clock_gettime(CLOCK_REALTIME, &timeout);
        timeout.tv_sec += seconds;
 
-       pthread_mutex_lock(&s->mutex);
+       assert(pthread_mutex_lock(&s->mutex) == 0);
 
        while(!s->flag) {
                if(!pthread_cond_timedwait(&s->cond, &s->mutex, &timeout) || errno != EINTR) {
@@ -41,7 +46,7 @@ bool wait_sync_flag(struct sync_flag *s, int seconds) {
                }
        }
 
-       pthread_mutex_unlock(&s->mutex);
+       assert(pthread_mutex_unlock(&s->mutex) == 0);
 
        return s->flag;
 }
@@ -108,6 +113,7 @@ static void pair_status_cb(meshlink_handle_t *mesh, meshlink_node_t *node, bool
 
 void start_meshlink_pair(meshlink_handle_t *a, meshlink_handle_t *b) {
        struct sync_flag pair_status = {.flag = false};
+       init_sync_flag(&pair_status);
 
        a->priv = &pair_status;
        meshlink_set_node_status_cb(a, pair_status_cb);
index 3576df594a70db81f7b3bfda871ba518f50051b8..883b9154cedde7cc81865796afc7e674eaba8aa0 100644 (file)
@@ -13,6 +13,7 @@ struct sync_flag {
        bool flag;
 };
 
+extern void init_sync_flag(struct sync_flag *s);
 extern void set_sync_flag(struct sync_flag *s, bool value);
 extern bool check_sync_flag(struct sync_flag *s);
 extern bool wait_sync_flag(struct sync_flag *s, int seconds);
@@ -49,7 +50,7 @@ extern void log_cb(meshlink_handle_t *mesh, meshlink_log_level_t level, const ch
 #endif
 
 /// Compare two timespec values.
-static bool timespec_lt(const struct timespec *a, const struct timespec *b) {
+static inline bool timespec_lt(const struct timespec *a, const struct timespec *b) {
        if(a->tv_sec == b->tv_sec) {
                return a->tv_nsec < b->tv_nsec;
        } else {