]> git.meshlink.io Git - meshlink/blobdiff - src/discovery.c
Merge branch 'discovery' into everbase
[meshlink] / src / discovery.c
index 1f163cf682a41e596a8d7eb8a3a414538f4de0cb..4d1209b856ab9cef92d4bacab5af9fbc2a361d61 100644 (file)
@@ -500,28 +500,42 @@ void discovery_stop(meshlink_handle_t *mesh)
 {
     // asserts
     assert(mesh != NULL);
-    assert(mesh->avahi_poll != NULL);
-    assert(mesh->avahi_server != NULL);
-    assert(mesh->avahi_browser != NULL);
-    assert(mesh->discovery_threadstarted == true);
-    assert(mesh->avahi_servicetype != NULL);
 
-       // Shut down 
-       avahi_simple_poll_quit(mesh->avahi_poll);
+       // Shut down
+    if(mesh->avahi_poll)
+    {
+        avahi_simple_poll_quit(mesh->avahi_poll);
+    }
 
        // Wait for the discovery thread to finish
-       pthread_join(mesh->discovery_thread, NULL);
+    if(mesh->discovery_threadstarted == true)
+    {
+        pthread_join(mesh->discovery_thread, NULL);
+        mesh->discovery_threadstarted = false;
+    }
 
        // Clean up resources
-    avahi_s_service_browser_free(mesh->avahi_browser);
-    mesh->avahi_browser = NULL;
+    if(mesh->avahi_browser != NULL)
+    {
+        avahi_s_service_browser_free(mesh->avahi_browser);
+        mesh->avahi_browser = NULL;
+    }
 
-    avahi_server_free(mesh->avahi_server);
-    mesh->avahi_server = NULL;
+    if(mesh->avahi_server != NULL)
+    {
+        avahi_server_free(mesh->avahi_server);
+        mesh->avahi_server = NULL;
+    }
 
-    avahi_simple_poll_free(mesh->avahi_poll);
-    mesh->avahi_poll = NULL;
+    if(mesh->avahi_poll != NULL)
+    {
+        avahi_simple_poll_free(mesh->avahi_poll);
+        mesh->avahi_poll = NULL;
+    }
 
-    free(mesh->avahi_servicetype);
-    mesh->avahi_servicetype = NULL;
+    if(mesh->avahi_servicetype != NULL)
+    {
+        free(mesh->avahi_servicetype);
+        mesh->avahi_servicetype = NULL;
+    }
 }