diff options
-rw-r--r-- | src/libhomescreen.cpp | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/src/libhomescreen.cpp b/src/libhomescreen.cpp index 84e3472..121def7 100644 --- a/src/libhomescreen.cpp +++ b/src/libhomescreen.cpp @@ -25,6 +25,7 @@ #include <cstdio> #include <cstdlib> #include <cstring> +#include <thread> #include <libhomescreen.hpp> #include "hmi-debug.h" @@ -87,6 +88,12 @@ static void _on_reply_static(void *closure, struct afb_wsj1_msg *msg) } +static void event_loop_run(struct sd_event* loop){ + sd_event_loop(loop); + sd_event_unref(loop); +} + + /** * constructor */ @@ -99,14 +106,14 @@ LibHomeScreen::LibHomeScreen() */ LibHomeScreen::~LibHomeScreen() { - if(mploop) - { - sd_event_unref(mploop); - } if(sp_websock != NULL) { afb_wsj1_unref(sp_websock); } + if(mploop) + { + sd_event_exit(mploop, 0); + } } /** @@ -177,13 +184,19 @@ int LibHomeScreen::initialize_websocket() mploop = NULL; onEvent = nullptr; onReply = nullptr; - int ret = sd_event_default(&mploop); + int ret = sd_event_new(&mploop); if(ret < 0) { HMI_ERROR("libhomescreen","Failed to create event loop"); goto END; } + { + // enforce context to avoid initialization/goto error + std::thread th(event_loop_run, mploop); + th.detach(); + } + /* Initialize interface from websocket */ minterface.on_hangup = _on_hangup_static; minterface.on_call = _on_call_static; @@ -201,10 +214,6 @@ int LibHomeScreen::initialize_websocket() return 0; END: - if(mploop) - { - sd_event_unref(mploop); - } return -1; } |