]> git.meshlink.io Git - meshlink/blobdiff - src/meshlink.c
Fix resource leaks found by cppcheck.
[meshlink] / src / meshlink.c
index 1c763d6a668e632a70650d648e259c9aedb66d88..68286d29046aa9e6477e012f5075f0a643f9e2d3 100644 (file)
@@ -941,10 +941,17 @@ bool meshlink_start(meshlink_handle_t *mesh) {
                meshlink_errno = MESHLINK_EINVAL;
                return false;
        }
-       pthread_mutex_lock(&(mesh->mesh_mutex));
        
        logger(mesh, MESHLINK_DEBUG, "meshlink_start called\n");
 
+       pthread_mutex_lock(&(mesh->mesh_mutex));
+
+       if(mesh->threadstarted) {
+               logger(mesh, MESHLINK_DEBUG, "thread was already running\n");
+               pthread_mutex_unlock(&(mesh->mesh_mutex));
+               return true;
+       }
+
        if(mesh->listen_socket[0].tcp.fd < 0) {
                logger(mesh, MESHLINK_ERROR, "Listening socket not open\n");
                meshlink_errno = MESHLINK_ENETWORK;
@@ -965,6 +972,8 @@ bool meshlink_start(meshlink_handle_t *mesh) {
 
        // Start the main thread
 
+       event_loop_start(&mesh->loop);
+
        if(pthread_create(&mesh->thread, NULL, meshlink_main_loop, mesh) != 0) {
                logger(mesh, MESHLINK_DEBUG, "Could not start thread: %s\n", strerror(errno));
                memset(&mesh->thread, 0, sizeof mesh->thread);
@@ -2033,7 +2042,6 @@ meshlink_edge_t **meshlink_get_all_edges_state(meshlink_handle_t *mesh, meshlink
                *nmemb = result_size;
        } else {
                *nmemb = 0;
-               free(result);
                meshlink_errno = MESHLINK_ENOMEM;
        }