From e93030befb2aebe94faf5c5455313d312611d7b3 Mon Sep 17 00:00:00 2001
From: Lukas Fleischer <calcurse@cryptocrack.de>
Date: Wed, 16 Jul 2014 23:19:10 +0200
Subject: Add a cleanup handler for the notify main thread

Make sure we do not leave behind unusable mutexes when calling
pthread_cancel().

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
---
 src/notify.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)

(limited to 'src')

diff --git a/src/notify.c b/src/notify.c
index 532bd01..0b02ebd 100644
--- a/src/notify.c
+++ b/src/notify.c
@@ -321,6 +321,15 @@ void notify_update_bar(void)
 	pthread_mutex_unlock(&notify.mutex);
 }
 
+static void
+notify_main_thread_cleanup(void *arg)
+{
+	pthread_mutex_trylock(&notify.mutex);
+	pthread_mutex_unlock(&notify.mutex);
+	pthread_mutex_trylock(&nbar.mutex);
+	pthread_mutex_unlock(&nbar.mutex);
+}
+
 /* Update the notication bar content */
 /* ARGSUSED0 */
 static void *notify_main_thread(void *arg)
@@ -334,6 +343,8 @@ static void *notify_main_thread(void *arg)
 
 	elapse = 0;
 
+	pthread_cleanup_push(notify_main_thread_cleanup, NULL);
+
 	for (;;) {
 		ntimer = time(NULL);
 		localtime_r(&ntimer, &ntime);
@@ -357,6 +368,8 @@ static void *notify_main_thread(void *arg)
 				notify_check_next_app(0);
 		}
 	}
+
+	pthread_cleanup_pop(0);
 	pthread_exit(NULL);
 }
 
-- 
cgit v1.2.3-70-g09d2