From 558fc46c63d28ce2ffd0abc5c737f49cc185ba82 Mon Sep 17 00:00:00 2001 From: Sander Vrijders Date: Thu, 11 Oct 2018 15:56:24 +0200 Subject: lib: Add cleanup function in notifier This adds a cleanup function in the notifier in case it gets cancelled, which is a possibility in some callbacks. Signed-off-by: Sander Vrijders Signed-off-by: Dimitri Staessens --- src/lib/notifier.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/lib/notifier.c b/src/lib/notifier.c index 593a0e70..4f77f2e3 100644 --- a/src/lib/notifier.c +++ b/src/lib/notifier.c @@ -75,12 +75,15 @@ void notifier_event(int event, pthread_rwlock_rdlock(¬ifier.lock); + pthread_cleanup_push((void (*) (void *)) pthread_rwlock_unlock, + (void *) ¬ifier.lock) + list_for_each(p, ¬ifier.listeners) { struct listener * l = list_entry(p, struct listener, next); l->callback(l->obj, event, o); } - pthread_rwlock_unlock(¬ifier.lock); + pthread_cleanup_pop(true); } int notifier_reg(notifier_fn_t callback, -- cgit v1.2.3