]> git.meshlink.io Git - meshlink/blobdiff - test/utils.c
Clean up resources in the test cases.
[meshlink] / test / utils.c
index a2b7b143972991d824ad23b9922860172f279921..46e147a57f63df606f953d93bf3cb3d80b47155e 100644 (file)
@@ -15,6 +15,14 @@ void set_sync_flag(struct sync_flag *s, bool value) {
        pthread_mutex_unlock(&s->mutex);
 }
 
+bool check_sync_flag(struct sync_flag *s) {
+       bool flag;
+       pthread_mutex_lock(&s->mutex);
+       flag = s->flag;
+       pthread_mutex_unlock(&s->mutex);
+       return flag;
+}
+
 bool wait_sync_flag(struct sync_flag *s, int seconds) {
        struct timespec timeout;
        clock_gettime(CLOCK_REALTIME, &timeout);
@@ -22,16 +30,34 @@ bool wait_sync_flag(struct sync_flag *s, int seconds) {
 
        pthread_mutex_lock(&s->mutex);
 
-       while(!s->flag)
+       while(!s->flag) {
                if(!pthread_cond_timedwait(&s->cond, &s->mutex, &timeout) || errno != EINTR) {
                        break;
                }
+       }
 
        pthread_mutex_unlock(&s->mutex);
 
        return s->flag;
 }
 
+void link_meshlink_pair(meshlink_handle_t *a, meshlink_handle_t *b) {
+       // Import and export both side's data
+
+       meshlink_add_address(a, "localhost");
+       meshlink_add_address(b, "localhost");
+
+       char *data = meshlink_export(a);
+       assert(data);
+       assert(meshlink_import(b, data));
+       free(data);
+
+       data = meshlink_export(b);
+       assert(data);
+       assert(meshlink_import(a, data));
+       free(data);
+}
+
 void open_meshlink_pair(meshlink_handle_t **pa, meshlink_handle_t **pb, const char *prefix) {
        // Create two new MeshLink instances
 
@@ -53,22 +79,13 @@ void open_meshlink_pair(meshlink_handle_t **pa, meshlink_handle_t **pb, const ch
        meshlink_handle_t *b = meshlink_open(b_name, "b", prefix, DEV_CLASS_BACKBONE);
        assert(b);
 
+       free(a_name);
+       free(b_name);
+
        meshlink_enable_discovery(a, false);
        meshlink_enable_discovery(b, false);
 
-       // Import and export both side's data
-
-       meshlink_add_address(a, "localhost");
-
-       char *data = meshlink_export(a);
-       assert(data);
-       assert(meshlink_import(b, data));
-       free(data);
-
-       data = meshlink_export(b);
-       assert(data);
-       assert(meshlink_import(a, data));
-       free(data);
+       link_meshlink_pair(a, b);
 
        *pa = a;
        *pb = b;
@@ -117,5 +134,8 @@ void close_meshlink_pair(meshlink_handle_t *a, meshlink_handle_t *b, const char
                ret_val = asprintf(&b_name, "%s_conf.2", prefix);
                assert(b_name);
                assert(meshlink_destroy(b_name));
+
+               free(a_name);
+               free(b_name);
        }
 }