diff options
| -rw-r--r-- | src/threads.c | 6 | 
1 files changed, 4 insertions, 2 deletions
| diff --git a/src/threads.c b/src/threads.c index 3cd69d3..dd1d620 100644 --- a/src/threads.c +++ b/src/threads.c @@ -84,9 +84,10 @@ static void * thread_func(void *_thread)  void threads_wait_idle(threads_t *threads)  {  	pthread_mutex_lock(&threads->idle_mutex); +	pthread_cleanup_push((void (*)(void *))pthread_mutex_unlock, &threads->idle_mutex);  	while (threads->n_idle < threads->n_threads)  		pthread_cond_wait(&threads->idle_cond, &threads->idle_mutex); -	pthread_mutex_unlock(&threads->idle_mutex); +	pthread_cleanup_pop(1);  } @@ -96,6 +97,7 @@ void threads_frame_submit(threads_t *threads, fb_fragment_t *fragment, rototille  	threads_wait_idle(threads);	/* XXX: likely non-blocking; already happens pre page flip */  	pthread_mutex_lock(&threads->frame_mutex); +	pthread_cleanup_push((void (*)(void *))pthread_mutex_unlock, &threads->frame_mutex);  	threads->fragment = fragment;  	threads->fragmenter = fragmenter;  	threads->render_fragment_func = render_fragment_func; @@ -104,7 +106,7 @@ void threads_frame_submit(threads_t *threads, fb_fragment_t *fragment, rototille  	threads->frame_num++;  	threads->n_idle = threads->next_fragment = 0;  	pthread_cond_broadcast(&threads->frame_cond); -	pthread_mutex_unlock(&threads->frame_mutex); +	pthread_cleanup_pop(1);  } | 
