summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcus Fritzsch <marcus.fritzsch@xse.de>2014-07-22 11:06:07 +0200
committerNobuhiko Tanibata <NOBUHIKO_TANIBATA@denso.co.jp>2014-08-12 22:15:14 +0900
commitb1663ee3809dbcda2f287a876b1c3f9c62944ae0 (patch)
tree4b805e33a4e74d3488e89902c2e7a7c5cb6f43d8
parent5a8fb80fbf1bb42e320eb6a4d8b07be1b7ed26fa (diff)
downloadwayland-ivi-extension-b1663ee3809dbcda2f287a876b1c3f9c62944ae0.tar.gz
ilmControl: cancel read even on thread cancellation
Signed-off-by: Marcus Fritzsch <marcus.fritzsch@xse.de>
-rw-r--r--ivi-layermanagement-api/ilmControl/src/ilm_control_wayland_platform.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/ivi-layermanagement-api/ilmControl/src/ilm_control_wayland_platform.c b/ivi-layermanagement-api/ilmControl/src/ilm_control_wayland_platform.c
index 29aa85a..2dd05ff 100644
--- a/ivi-layermanagement-api/ilmControl/src/ilm_control_wayland_platform.c
+++ b/ivi-layermanagement-api/ilmControl/src/ilm_control_wayland_platform.c
@@ -1270,6 +1270,11 @@ wayland_init(t_ilm_nativedisplay nativedisplay)
return init_control() == 0 ? ILM_SUCCESS : ILM_FAILED;
}
+static void cancel_read(void *d)
+{
+ wl_display_cancel_read(d);
+}
+
static void*
control_thread(void *p_ret)
{
@@ -1307,7 +1312,13 @@ control_thread(void *p_ret)
pfd.events = POLLIN;
pfd.revents = 0;
- if (poll(&pfd, 1, -1) != -1 && (pfd.revents & POLLIN))
+ int pollret = -1;
+
+ pthread_cleanup_push(cancel_read, wl->display);
+ pollret = poll(&pfd, 1, -1);
+ pthread_cleanup_pop(0);
+
+ if (pollret != -1 && (pfd.revents & POLLIN))
{
wl_display_read_events(wl->display);