diff options
author | Lukas Fleischer <calcurse@cryptocrack.de> | 2014-07-16 23:19:10 +0200 |
---|---|---|
committer | Lukas Fleischer <calcurse@cryptocrack.de> | 2014-07-16 23:19:10 +0200 |
commit | e93030befb2aebe94faf5c5455313d312611d7b3 (patch) | |
tree | be68d2dcc3251e8dada80746d8ceb3f811ebe7cd /src | |
parent | e6b0282a1871da86d7255a17ee5cca62827e3777 (diff) | |
download | calcurse-e93030befb2aebe94faf5c5455313d312611d7b3.tar.gz calcurse-e93030befb2aebe94faf5c5455313d312611d7b3.zip |
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>
Diffstat (limited to 'src')
-rw-r--r-- | src/notify.c | 13 |
1 files changed, 13 insertions, 0 deletions
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(¬ify.mutex); } +static void +notify_main_thread_cleanup(void *arg) +{ + pthread_mutex_trylock(¬ify.mutex); + pthread_mutex_unlock(¬ify.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); } |