From bb547ffaf8a000ba05ad6a4587251e85d71b5c09 Mon Sep 17 00:00:00 2001 From: Steffen Vogel Date: Sat, 15 Apr 2017 23:12:53 +0200 Subject: [PATCH] queue_signalled: pthread attributes only need to exist during initialisation of their belonging objects See: http://stackoverflow.com/questions/11062292/are-pthread-attribute-objects-required-to-exist-for-the-lifetime-of-the-object-t --- include/villas/queue_signalled.h | 2 -- lib/queue_signalled.c | 20 ++++++++++++++------ 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/include/villas/queue_signalled.h b/include/villas/queue_signalled.h index 740fb2e75..d8dfabad6 100644 --- a/include/villas/queue_signalled.h +++ b/include/villas/queue_signalled.h @@ -15,9 +15,7 @@ struct queue_signalled { struct queue q; /**< Actual underlying queue. */ pthread_cond_t ready; /**< Condition variable to signal writes to the queue. */ - pthread_condattr_t readyattr; pthread_mutex_t mt; /**< Mutex for ready. */ - pthread_mutexattr_t mtattr; }; int queue_signalled_init(struct queue_signalled *qs, size_t size, struct memtype *mem); diff --git a/lib/queue_signalled.c b/lib/queue_signalled.c index f6f535e36..bebf6a84e 100644 --- a/lib/queue_signalled.c +++ b/lib/queue_signalled.c @@ -12,15 +12,23 @@ int queue_signalled_init(struct queue_signalled *qs, size_t size, struct memtype int ret; ret = queue_init(&qs->q, size, mem); + + pthread_condattr_t cvattr; + pthread_mutexattr_t mtattr; if (ret < 0) return ret; - pthread_mutexattr_init(&qs->mtattr); - pthread_mutexattr_setpshared(&qs->mtattr, PTHREAD_PROCESS_SHARED); - pthread_condattr_init(&qs->readyattr); - pthread_condattr_setpshared(&qs->readyattr, PTHREAD_PROCESS_SHARED); - pthread_mutex_init(&qs->mt, &qs->mtattr); - pthread_cond_init(&qs->ready, &qs->readyattr); + pthread_mutexattr_init(&mtattr); + pthread_condattr_init(&cvattr); + + pthread_mutexattr_setpshared(&mtattr, PTHREAD_PROCESS_SHARED); + pthread_condattr_setpshared(&cvattr, PTHREAD_PROCESS_SHARED); + + pthread_mutex_init(&qs->mutex, &mtattr); + pthread_cond_init(&qs->ready, &cvattr); + + pthread_mutexattr_destroy(&mtattr); + pthread_condattr_destroy(&cvattr); return 0; }