X-Git-Url: http://git.meshlink.io/?p=meshlink;a=blobdiff_plain;f=src%2Fmeshlink.c;h=1de54e916dab53abaa5f85a3db8739783fa3d3f1;hp=24d4c249eb8c2285604e2fd9dd5d2f4a51ed8474;hb=f0d03b570cf72570573b76d74c2700ab60abda93;hpb=c83c7948602acfb5fd0716ac6a47e0c9c9f9bfd8 diff --git a/src/meshlink.c b/src/meshlink.c index 24d4c249..1de54e91 100644 --- a/src/meshlink.c +++ b/src/meshlink.c @@ -1127,6 +1127,7 @@ bool meshlink_start(meshlink_handle_t *mesh) { logger(mesh, MESHLINK_DEBUG, "Could not start thread: %s\n", strerror(errno)); memset(&mesh->thread, 0, sizeof(mesh)->thread); meshlink_errno = MESHLINK_EINTERNAL; + event_loop_stop(&mesh->loop); pthread_mutex_unlock(&(mesh->mesh_mutex)); return false; } @@ -1173,12 +1174,14 @@ void meshlink_stop(meshlink_handle_t *mesh) { } } - // Wait for the main thread to finish - pthread_mutex_unlock(&(mesh->mesh_mutex)); - pthread_join(mesh->thread, NULL); - pthread_mutex_lock(&(mesh->mesh_mutex)); + if(mesh->threadstarted) { + // Wait for the main thread to finish + pthread_mutex_unlock(&(mesh->mesh_mutex)); + pthread_join(mesh->thread, NULL); + pthread_mutex_lock(&(mesh->mesh_mutex)); - mesh->threadstarted = false; + mesh->threadstarted = false; + } // Close all metaconnections if(mesh->connections) { @@ -1192,10 +1195,9 @@ void meshlink_stop(meshlink_handle_t *mesh) { if(mesh->outgoings) { list_delete_list(mesh->outgoings); + mesh->outgoings = NULL; } - mesh->outgoings = NULL; - pthread_mutex_unlock(&(mesh->mesh_mutex)); }