From 5b82f3355b8b98351992b50f84697c64af8e9501 Mon Sep 17 00:00:00 2001 From: Christian Thaeter Date: Mon, 26 Jan 2009 09:21:03 +0100 Subject: [PATCH] store a lumiera_mutex in a sectionlock, looks cleaner --- src/lib/mutex.c | 2 +- src/lib/mutex.h | 18 +++++++++--------- src/lib/sectionlock.h | 3 +-- 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/lib/mutex.c b/src/lib/mutex.c index d6961982d..c7d6df040 100644 --- a/src/lib/mutex.c +++ b/src/lib/mutex.c @@ -58,7 +58,7 @@ lumiera_mutex_destroy (LumieraMutex self, struct nobug_flag* flag) int lumiera_mutex_unlock_cb (void* mutex) { - return pthread_mutex_unlock ((pthread_mutex_t*) mutex); + return pthread_mutex_unlock (&((LumieraMutex)mutex)->mutex); } /* diff --git a/src/lib/mutex.h b/src/lib/mutex.h index a6943d5a5..5708e19be 100644 --- a/src/lib/mutex.h +++ b/src/lib/mutex.h @@ -44,11 +44,11 @@ lumiera_lock_section_.lock;) \ for ( \ ({ \ - lumiera_lock_section_.lock = &(mtx)->mutex; \ + lumiera_lock_section_.lock = (mtx); \ NOBUG_IF_ALPHA(lumiera_lock_section_.flag = &NOBUG_FLAG(nobugflag);) \ RESOURCE_ENTER (nobugflag, (mtx)->rh, "acquire mutex", &lumiera_lock_section_, \ NOBUG_RESOURCE_WAITING, lumiera_lock_section_.rh); \ - if (pthread_mutex_lock ((pthread_mutex_t*)lumiera_lock_section_.lock)) \ + if (pthread_mutex_lock (&(mtx)->mutex)) \ LUMIERA_DIE (LOCK_ACQUIRE); \ RESOURCE_STATE (nobugflag, NOBUG_RESOURCE_EXCLUSIVE, lumiera_lock_section_.rh); \ }); \ @@ -73,12 +73,12 @@ lumiera_lock_section_.lock;) \ for ( \ ({ \ - REQUIRE (lumiera_lock_section_old_->lock, "section prematurely unlocked"); \ - lumiera_lock_section_.lock = &(mtx)->mutex; \ + REQUIRE (lumiera_lock_section_old_->lock, "section prematurely unlocked"); \ + lumiera_lock_section_.lock = mtx; \ NOBUG_IF_ALPHA(lumiera_lock_section_.flag = &NOBUG_FLAG(nobugflag);) \ RESOURCE_ENTER (nobugflag, (mtx)->rh, "acquire mutex", &lumiera_lock_section_, \ NOBUG_RESOURCE_WAITING, lumiera_lock_section_.rh); \ - if (pthread_mutex_lock ((pthread_mutex_t*)lumiera_lock_section_.lock)) \ + if (pthread_mutex_lock (&(mtx)->mutex)) \ LUMIERA_DIE (LOCK_ACQUIRE); \ RESOURCE_STATE (nobugflag, NOBUG_RESOURCE_EXCLUSIVE, lumiera_lock_section_.rh); \ LUMIERA_SECTION_UNLOCK_(lumiera_lock_section_old_); \ @@ -103,11 +103,11 @@ lumiera_lock_section_.lock;) \ for ( \ ({ \ - lumiera_lock_section_.lock = &(mtx)->recmutex; \ + lumiera_lock_section_.lock = (mtx); \ NOBUG_IF_ALPHA(lumiera_lock_section_.flag = &NOBUG_FLAG(nobugflag);) \ RESOURCE_ENTER (nobugflag, (mtx)->rh, "acquire recmutex", &lumiera_lock_section_, \ NOBUG_RESOURCE_WAITING, lumiera_lock_section_.rh); \ - if (pthread_mutex_lock ((pthread_mutex_t*)lumiera_lock_section_.lock)) \ + if (pthread_mutex_lock (&(mtx)->recmutex)) \ LUMIERA_DIE (LOCK_ACQUIRE); \ RESOURCE_STATE (nobugflag, NOBUG_RESOURCE_RECURSIVE, lumiera_lock_section_.rh); \ }); \ @@ -125,11 +125,11 @@ for ( \ ({ \ REQUIRE (lumiera_lock_section_old_->lock, "section prematurely unlocked"); \ - lumiera_lock_section_.lock = &(mtx)->recmutex; \ + lumiera_lock_section_.lock = (mtx); \ NOBUG_IF_ALPHA(lumiera_lock_section_.flag = &NOBUG_FLAG(nobugflag);) \ RESOURCE_ENTER (nobugflag, (mtx)->rh, "acquire recmutex", &lumiera_lock_section_, \ NOBUG_RESOURCE_WAITING, lumiera_lock_section_.rh); \ - if (pthread_mutex_lock ((pthread_mutex_t*)lumiera_lock_section_.lock)) \ + if (pthread_mutex_lock (&(mtx)->recmutex)) \ LUMIERA_DIE (LOCK_ACQUIRE); \ RESOURCE_STATE (nobugflag, NOBUG_RESOURCE_recursive, lumiera_lock_section_.rh); \ LUMIERA_SECTION_UNLOCK_(lumiera_lock_section_old_) \ diff --git a/src/lib/sectionlock.h b/src/lib/sectionlock.h index 0bc4d80fb..c50ecfc8d 100644 --- a/src/lib/sectionlock.h +++ b/src/lib/sectionlock.h @@ -62,13 +62,12 @@ lumiera_sectionlock_ensureunlocked (LumieraSectionlock self) * @param sectionname name used for the sectionlock instance * @param ... some extra code to execute */ -#define LUMIERA_SECTION_UNLOCK_(section, ...) \ +#define LUMIERA_SECTION_UNLOCK_(section) \ do if ((section)->lock) \ { \ if ((section)->unlock((section)->lock)) \ LUMIERA_DIE (LOCK_RELEASE); \ (section)->lock = NULL; \ - __VA_ARGS__; \ NOBUG_RESOURCE_LEAVE_RAW((section)->flag, (section)->rh); \ } while (0)