aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/libhomescreen.cpp27
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;
}