diff --git a/common/utils/T/tracer/gui/gui.c b/common/utils/T/tracer/gui/gui.c index 55c7a3680aa04b23341cd2d6c123acf6e0a96cfe..2166774d929f441595ca06d6fa080a2980324c12 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 c708639674f88099dc1cdaf7c6df6ff96fa0ed11..445f696643c0eba3c4ef6ac18e72fa26cb8889dd 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 50164dce359a570a2df901b5e1c3dac46bb8dae6..12888da468986fa52c292d9626c09799c97bff1f 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 c1f8d33d89e8831c8a1882ecbf737763c02191fb..82e46cac9da477c0159de80903877e87c21af7c6 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,