static struct timeval idle(event_loop_t *loop, void *data) {
meshlink_handle_t *mesh = data;
- int t, tmin = -1;
+ struct timeval t, tmin = {3600, 0};
for splay_each(node_t, n, mesh->nodes) {
if(!n->utcp)
continue;
t = utcp_timeout(n->utcp);
- if(t >= 0 && t < tmin)
+ if(timercmp(&t, &tmin, <))
tmin = t;
}
- struct timeval tv = {.tv_sec = t};
- return tv;
+ return tmin;
}
static bool meshlink_setup(meshlink_handle_t *mesh) {
return;
}
+ // stop can be called even if mesh has not been started
+ meshlink_stop(mesh);
+
// lock is not released after this
pthread_mutex_lock(&(mesh->mesh_mutex));