node_t *n = (node_t *)node;
connection_t *c = n->connection;
+ n->catta_address = naddress;
node_add_recent_address(mesh, n, &naddress);
if(c && c->outgoing && !c->status.active) {
c->outgoing->timeout = 0;
if(c->outgoing->ev.cb) {
- timeout_set(&mesh->loop, &c->outgoing->ev, &(struct timeval) {
+ timeout_set(&mesh->loop, &c->outgoing->ev, &(struct timespec) {
0, 0
});
}
- c->last_ping_time = 0;
+ c->last_ping_time = -3600;
}
} else {
meshlink_handle_t *mesh = userdata;
assert(mesh);
+ pthread_mutex_lock(&mesh->discovery_mutex);
+
// handle catta logs
catta_set_log_function(discovery_log_cb);
/* Free the configuration data */
catta_server_config_free(&config);
- /* Check wether creating the server object succeeded */
+ /* Check whether creating the server object succeeded */
if(!mesh->catta_server) {
logger(mesh, MESHLINK_ERROR, "Failed to create discovery server: %s\n", catta_strerror(error));
goto fail;
fail:
- pthread_mutex_lock(&mesh->discovery_mutex);
pthread_cond_broadcast(&mesh->discovery_cond);
pthread_mutex_unlock(&mesh->discovery_mutex);
assert(!mesh->discovery_threadstarted);
assert(!mesh->catta_servicetype);
+ pthread_mutex_lock(&mesh->discovery_mutex);
+
// Start the discovery thread
if(pthread_create(&mesh->discovery_thread, NULL, discovery_loop, mesh) != 0) {
+ pthread_mutex_unlock(&mesh->discovery_mutex);
logger(mesh, MESHLINK_ERROR, "Could not start discovery thread: %s\n", strerror(errno));
memset(&mesh->discovery_thread, 0, sizeof(mesh)->discovery_thread);
return false;
}
- pthread_mutex_lock(&mesh->discovery_mutex);
pthread_cond_wait(&mesh->discovery_cond, &mesh->discovery_mutex);
pthread_mutex_unlock(&mesh->discovery_mutex);