diff options
author | Jeremy White <jwhite@codeweavers.com> | 2016-09-21 11:26:25 -0500 |
---|---|---|
committer | Jeremy White <jwhite@codeweavers.com> | 2016-09-21 11:26:25 -0500 |
commit | c98134bd3eda801aeff30360e5797c7aa5370d27 (patch) | |
tree | 2005077bd645e504c79c954b7bebe8f6b50b02fd | |
parent | 8c4c93900b359a80d5e62a79697bcb507fe7e3d6 (diff) |
Ensure that the damage thread is shut down cleanly.
-rw-r--r-- | src/display.c | 7 | ||||
-rw-r--r-- | src/display.h | 1 | ||||
-rw-r--r-- | src/session.c | 2 |
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); |