From 574b710ef8da766019a406801893937a6df9357c Mon Sep 17 00:00:00 2001 From: Marek Chalupa Date: Tue, 5 Aug 2014 11:42:01 +0200 Subject: [PATCH] client: broadcast the right pthread_cond variable In previous commit we removed unused variables. One of them was pthread_cond_t that was formerly used when reading from display, but later was (erroneously) made unused. This patch fixes this error and is a fix for the failing test introduced few patches ago (tests: test if thread can block on error) Reviewed-by: Pekka Paalanen --- src/wayland-client.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/wayland-client.c b/src/wayland-client.c index 4b184d5a..0f3f3d9a 100644 --- a/src/wayland-client.c +++ b/src/wayland-client.c @@ -127,6 +127,12 @@ display_fatal_error(struct wl_display *display, int error) error = EFAULT; display->last_error = error; + + pthread_cond_broadcast(&display->reader_cond); + /* prevent from indefinite looping in read_events() + * (when calling pthread_cond_wait under condition + * display->read_serial == serial) */ + ++display->read_serial; } /** @@ -175,6 +181,16 @@ display_protocol_error(struct wl_display *display, uint32_t code, display->protocol_error.id = id; display->protocol_error.interface = intf; + /* + * here it is not necessary to broadcast reader's cond like in + * display_fatal_error, because this function is called from + * an event handler and that means that read_events() is done + * and woke up all threads. Since wl_display_prepare_read() + * fails when there are events in the queue, no threads + * can sleep in read_events() during dispatching + * (and therefore during calling this function), so this is safe. + */ + pthread_mutex_unlock(&display->mutex); }