The event loop didn't react to event_loop_stop() if it wasn't started yet
(because that is done in mesh->thread). The solution is to add a
event_loop_start() function that is to be called by meshlink_start().
}
bool event_loop_run(event_loop_t *loop, pthread_mutex_t *mutex) {
- loop->running = true;
-
fd_set readable;
fd_set writable;
io->cb(loop, io->data, IO_WRITE);
}
+void event_loop_start(event_loop_t *loop) {
+ loop->running = true;
+}
+
void event_loop_stop(event_loop_t *loop) {
loop->running = false;
}
extern void event_loop_exit(event_loop_t *loop);
extern bool event_loop_run(event_loop_t *loop, pthread_mutex_t *mutex);
extern void event_loop_flush_output(event_loop_t *loop);
+extern void event_loop_start(event_loop_t *loop);
extern void event_loop_stop(event_loop_t *loop);
#endif
// 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);