summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy White <jwhite@codeweavers.com>2016-09-21 11:26:25 -0500
committerJeremy White <jwhite@codeweavers.com>2016-09-21 11:26:25 -0500
commitc98134bd3eda801aeff30360e5797c7aa5370d27 (patch)
tree2005077bd645e504c79c954b7bebe8f6b50b02fd
parent8c4c93900b359a80d5e62a79697bcb507fe7e3d6 (diff)
Ensure that the damage thread is shut down cleanly.
-rw-r--r--src/display.c7
-rw-r--r--src/display.h1
-rw-r--r--src/session.c2
3 files changed, 10 insertions, 0 deletions
diff --git a/src/display.c b/src/display.c
index 43dc4eb..b88eeb9 100644
--- a/src/display.c
+++ b/src/display.c
@@ -492,6 +492,13 @@ int display_start_event_thread(display_t *d)
return pthread_create(&d->event_thread, NULL, handle_xevents, d);
}
+void display_stop_event_thread(display_t *d)
+{
+ void *err;
+ shutdown(xcb_get_file_descriptor(d->c), SHUT_RD);
+ pthread_join(d->event_thread, &err);
+}
+
void display_close(display_t *d)
{
diff --git a/src/display.h b/src/display.h
index dcf276f..dc4254b 100644
--- a/src/display.h
+++ b/src/display.h
@@ -71,6 +71,7 @@ void display_close(display_t *display);
int display_create_screen_images(display_t *d);
void display_destroy_screen_images(display_t *d);
int display_start_event_thread(display_t *d);
+void display_stop_event_thread(display_t *d);
int display_find_changed_tiles(display_t *d, int row, int *tiles, int tiles_across);
void display_copy_image_into_fullscreen(display_t *d, shm_image_t *shmi, int x, int y);
diff --git a/src/session.c b/src/session.c
index 416e7ad..8c6853f 100644
--- a/src/session.c
+++ b/src/session.c
@@ -229,6 +229,8 @@ void session_end(session_t *s)
s->running = 0;
global_session = NULL;
+ display_stop_event_thread(&s->display);
+
scanner_destroy(&s->scanner);
display_destroy_screen_images(&s->display);