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)