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;
// 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);
*nmemb = result_size;
} else {
*nmemb = 0;
- free(result);
meshlink_errno = MESHLINK_ENOMEM;
}