From 88bef83d8ba630f573f41495b0e7ff5381a43047 Mon Sep 17 00:00:00 2001 From: Cedric Roux <cedric.roux@eurecom.fr> Date: Fri, 29 Apr 2016 18:29:04 +0200 Subject: [PATCH] X threading handling --- common/utils/T/tracer/gui/gui.c | 2 ++ common/utils/T/tracer/gui/init.c | 2 ++ common/utils/T/tracer/gui/x.c | 17 +++++++++++++++++ common/utils/T/tracer/gui/x.h | 5 +++++ 4 files changed, 26 insertions(+) diff --git a/common/utils/T/tracer/gui/gui.c b/common/utils/T/tracer/gui/gui.c index 55c7a3680a..2166774d92 100644 --- a/common/utils/T/tracer/gui/gui.c +++ b/common/utils/T/tracer/gui/gui.c @@ -9,11 +9,13 @@ void glock(gui *_gui) { struct gui *g = _gui; if (pthread_mutex_lock(g->lock)) ERR("mutex error\n"); + xlock(g->x); } void gunlock(gui *_gui) { struct gui *g = _gui; + xunlock(g->x); if (pthread_mutex_unlock(g->lock)) ERR("mutex error\n"); } diff --git a/common/utils/T/tracer/gui/init.c b/common/utils/T/tracer/gui/init.c index c708639674..445f696643 100644 --- a/common/utils/T/tracer/gui/init.c +++ b/common/utils/T/tracer/gui/init.c @@ -12,6 +12,8 @@ gui *gui_init(void) { struct gui *ret; + x_init_threading(); + ret = calloc(1, sizeof(struct gui)); if (ret == NULL) OOM; diff --git a/common/utils/T/tracer/gui/x.c b/common/utils/T/tracer/gui/x.c index 50164dce35..12888da468 100644 --- a/common/utils/T/tracer/gui/x.c +++ b/common/utils/T/tracer/gui/x.c @@ -6,6 +6,23 @@ #include <stdlib.h> #include <string.h> +void x_init_threading(void) +{ + if (XInitThreads() == False) abort(); +} + +void xlock(x_connection *_x) +{ + struct x_connection *x = _x; + XLockDisplay(x->d); +} + +void xunlock(x_connection *_x) +{ + struct x_connection *x = _x; + XUnlockDisplay(x->d); +} + int x_connection_fd(x_connection *_x) { struct x_connection *x = _x; diff --git a/common/utils/T/tracer/gui/x.h b/common/utils/T/tracer/gui/x.h index c1f8d33d89..82e46cac9d 100644 --- a/common/utils/T/tracer/gui/x.h +++ b/common/utils/T/tracer/gui/x.h @@ -6,6 +6,11 @@ typedef void x_connection; typedef void x_window; +void x_init_threading(void); + +void xlock(x_connection *x); +void xunlock(x_connection *x); + x_connection *x_open(void); x_window *x_create_window(x_connection *x, int width, int height, -- GitLab