restructure some libuv stuff

This commit is contained in:
Paul Dino Jones 2026-02-06 17:54:17 -05:00
parent 835b04fc13
commit 273e91ac71
1 changed files with 35 additions and 23 deletions

View File

@ -352,9 +352,17 @@ void releaseloop(loop_data* f, SimData* simdata, SimMap* simmap)
if(f->releasing == false) if(f->releasing == false)
{ {
f->releasing = true; f->releasing = true;
uv_udp_recv_stop(&recv_socket);
uv_timer_stop(&datamaptimer); uv_timer_stop(&datamaptimer);
uv_timer_stop(&showstatstimer); uv_timer_stop(&showstatstimer);
if (uv_is_active((uv_handle_t*)&recv_socket))
{
uv_udp_recv_stop(&recv_socket);
}
// Close the socket handle so it can be reinitialized with a different port
//if (!uv_is_closing((uv_handle_t*)&recv_socket))
//{
// uv_close((uv_handle_t*)&recv_socket, NULL);
//}
slogi("releasing devices, please wait"); slogi("releasing devices, please wait");
//attempt tyre diameter saving //attempt tyre diameter saving
@ -417,8 +425,8 @@ void releaseloop(loop_data* f, SimData* simdata, SimMap* simmap)
if(appstate > 0) if(appstate > 0)
{ {
slogi("restarting data check timer"); slogi("restarting checking for data...");
uv_timer_start(&datachecktimer, datacheckcallback, 3000, 1000); uv_timer_start(&datachecktimer, datacheckcallback, 0, 1000);
} }
f->releasing = false; f->releasing = false;
if(appstate > 1) if(appstate > 1)
@ -598,14 +606,11 @@ void cb(uv_poll_t* handle, int status, int events)
{ {
slogi("Monocoque is exiting..."); slogi("Monocoque is exiting...");
uv_udp_recv_stop(&recv_socket); uv_udp_recv_stop(&recv_socket);
uv_timer_stop(&datachecktimer);
uv_timer_stop(&datamaptimer); uv_timer_stop(&datamaptimer);
uv_timer_stop(&showstatstimer); uv_timer_stop(&showstatstimer);
// at this point these below should be the only active threads
uv_timer_stop(&datachecktimer);
uv_poll_stop(handle); uv_poll_stop(handle);
uv_walk(uv_default_loop(), close_walk_cb, NULL);
uv_loop_close(uv_default_loop());
uv_library_shutdown();
slogi("All threads stopped...");
} }
} }
@ -638,36 +643,43 @@ int monocoque_mainloop(MonocoqueSettings* ms)
baton->releasing = false; baton->releasing = false;
baton->sim = 0; baton->sim = 0;
baton->req.data = (void*) baton; baton->req.data = (void*) baton;
uv_handle_set_data((uv_handle_t*) &datachecktimer, (void*) baton);
uv_handle_set_data((uv_handle_t*) &datamaptimer, (void*) baton);
uv_handle_set_data((uv_handle_t*) &showstatstimer, (void*) baton);
uv_handle_set_data((uv_handle_t*) &recv_socket, (void*) baton);
uv_handle_set_data((uv_handle_t*) poll, (void*) baton);
appstate = 1;
slogd("setting initial app state");
uv_timer_init(uv_default_loop(), &datachecktimer);
uv_timer_init(uv_default_loop(), &showstatstimer);
fprintf(stdout, "Searching for sim data... Press q to quit...\n");
uv_timer_start(&datachecktimer, datacheckcallback, 1000, 1000);
set_simapi_log_info(simapilib_loginfo); set_simapi_log_info(simapilib_loginfo);
set_simapi_log_debug(simapilib_logdebug); set_simapi_log_debug(simapilib_logdebug);
set_simapi_log_trace(simapilib_logtrace); set_simapi_log_trace(simapilib_logtrace);
if (0 != uv_poll_init(uv_default_loop(), poll, 0)) if (0 != uv_poll_init(uv_default_loop(), poll, 0))
{ {
return 1; return 1;
}; };
uv_timer_init(uv_default_loop(), &datachecktimer);
uv_timer_init(uv_default_loop(), &showstatstimer);
uv_timer_init(uv_default_loop(), &datamaptimer);
slogd("setting initial app state");
appstate = 1;
uv_handle_set_data((uv_handle_t*) &datachecktimer, (void*) baton);
uv_handle_set_data((uv_handle_t*) &datamaptimer, (void*) baton);
uv_handle_set_data((uv_handle_t*) &showstatstimer, (void*) baton);
uv_handle_set_data((uv_handle_t*) &recv_socket, (void*) baton);
uv_handle_set_data((uv_handle_t*) poll, (void*) baton);
if (0 != uv_poll_start(poll, UV_READABLE, cb)) if (0 != uv_poll_start(poll, UV_READABLE, cb))
{ {
return 2; return 2;
}; };
uv_timer_start(&datachecktimer, datacheckcallback, 1000, 1000);
fprintf(stdout, "Searching for sim data... Press q to quit...\n");
uv_timer_init(uv_default_loop(), &datamaptimer);
uv_run(uv_default_loop(), UV_RUN_DEFAULT); uv_run(uv_default_loop(), UV_RUN_DEFAULT);
uv_stop(uv_default_loop());
//uv_walk(uv_default_loop(), close_walk_cb, NULL);
uv_run(uv_default_loop(), UV_RUN_DEFAULT);
uv_loop_close(uv_default_loop());
uv_library_shutdown();
slogi("All threads stopped...");
fprintf(stdout, "\n"); fprintf(stdout, "\n");
fflush(stdout); fflush(stdout);
tcsetattr(0, TCSANOW, &canonicalmode); tcsetattr(0, TCSANOW, &canonicalmode);