get rid of X locks, there were missing glock/gunlock here and there
This commit is contained in:
@@ -9,18 +9,24 @@ void glock(gui *_gui)
|
|||||||
{
|
{
|
||||||
struct gui *g = _gui;
|
struct gui *g = _gui;
|
||||||
if (pthread_mutex_lock(g->lock)) ERR("mutex error\n");
|
if (pthread_mutex_lock(g->lock)) ERR("mutex error\n");
|
||||||
xlock(g->x);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void gunlock(gui *_gui)
|
void gunlock(gui *_gui)
|
||||||
{
|
{
|
||||||
struct gui *g = _gui;
|
struct gui *g = _gui;
|
||||||
xunlock(g->x);
|
|
||||||
if (pthread_mutex_unlock(g->lock)) ERR("mutex error\n");
|
if (pthread_mutex_unlock(g->lock)) ERR("mutex error\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
int new_color(gui *_gui, char *color)
|
int new_color(gui *_gui, char *color)
|
||||||
{
|
{
|
||||||
struct gui *g = _gui;
|
struct gui *g = _gui;
|
||||||
return x_new_color(g->x, color);
|
int ret;
|
||||||
|
|
||||||
|
glock(g);
|
||||||
|
|
||||||
|
ret = x_new_color(g->x, color);
|
||||||
|
|
||||||
|
gunlock(g);
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,8 +12,6 @@ gui *gui_init(void)
|
|||||||
{
|
{
|
||||||
struct gui *ret;
|
struct gui *ret;
|
||||||
|
|
||||||
x_init_threading();
|
|
||||||
|
|
||||||
ret = calloc(1, sizeof(struct gui));
|
ret = calloc(1, sizeof(struct gui));
|
||||||
if (ret == NULL) OOM;
|
if (ret == NULL) OOM;
|
||||||
|
|
||||||
@@ -25,7 +23,12 @@ gui *gui_init(void)
|
|||||||
if (pipe(ret->event_pipe))
|
if (pipe(ret->event_pipe))
|
||||||
ERR("%s\n", strerror(errno));
|
ERR("%s\n", strerror(errno));
|
||||||
|
|
||||||
|
/* lock not necessary but there for consistency (when instrumenting x.c
|
||||||
|
* we need the gui to be locked when calling any function in x.c)
|
||||||
|
*/
|
||||||
|
glock(ret);
|
||||||
ret->x = x_open();
|
ret->x = x_open();
|
||||||
|
gunlock(ret);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,14 +16,21 @@ void gui_loop(gui *_gui)
|
|||||||
int maxfd;
|
int maxfd;
|
||||||
fd_set rd;
|
fd_set rd;
|
||||||
|
|
||||||
|
/* lock not necessary but there for consistency (when instrumenting x.c
|
||||||
|
* we need the gui to be locked when calling any function in x.c)
|
||||||
|
*/
|
||||||
|
glock(g);
|
||||||
xfd = x_connection_fd(g->x);
|
xfd = x_connection_fd(g->x);
|
||||||
|
gunlock(g);
|
||||||
eventfd = g->event_pipe[0];
|
eventfd = g->event_pipe[0];
|
||||||
|
|
||||||
if (eventfd > xfd) maxfd = eventfd;
|
if (eventfd > xfd) maxfd = eventfd;
|
||||||
else maxfd = xfd;
|
else maxfd = xfd;
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
|
glock(g);
|
||||||
x_flush(g->x);
|
x_flush(g->x);
|
||||||
|
gunlock(g);
|
||||||
FD_ZERO(&rd);
|
FD_ZERO(&rd);
|
||||||
FD_SET(xfd, &rd);
|
FD_SET(xfd, &rd);
|
||||||
FD_SET(eventfd, &rd);
|
FD_SET(eventfd, &rd);
|
||||||
|
|||||||
@@ -6,23 +6,6 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.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)
|
int x_connection_fd(x_connection *_x)
|
||||||
{
|
{
|
||||||
struct x_connection *x = _x;
|
struct x_connection *x = _x;
|
||||||
|
|||||||
@@ -6,11 +6,6 @@
|
|||||||
typedef void x_connection;
|
typedef void x_connection;
|
||||||
typedef void x_window;
|
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_connection *x_open(void);
|
||||||
|
|
||||||
x_window *x_create_window(x_connection *x, int width, int height,
|
x_window *x_create_window(x_connection *x, int width, int height,
|
||||||
|
|||||||
Reference in New Issue
Block a user