From 0dc3768225cf0fc80563e5346b7ff566099eeee3 Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Tue, 12 Dec 2023 13:57:33 -0500 Subject: [PATCH] MT#55283 use g_auto for auto locks Change-Id: I103e0d9a2e24286b242ccd3ac4d2d6b734cdfe35 --- lib/auxlib.h | 48 ++++++++++++++++++++++++++++++++---------------- 1 file changed, 32 insertions(+), 16 deletions(-) diff --git a/lib/auxlib.h b/lib/auxlib.h index 0d28fb6dc..105940249 100644 --- a/lib/auxlib.h +++ b/lib/auxlib.h @@ -240,28 +240,44 @@ INLINE int __debug_rwlock_unlock_w(rwlock_t *m, const char *file, unsigned int l #endif -INLINE void rtpe_auto_cleanup_mutex(mutex_t **m) { - mutex_unlock(*m); +typedef mutex_t mutex_lock_t; +typedef rwlock_t rwlock_w_lock_t; +typedef rwlock_t rwlock_r_lock_t; + +INLINE void mutex_ptr_unlock(mutex_lock_t *m) { + mutex_unlock(m); +} +INLINE mutex_lock_t *mutex_auto_lock(mutex_t *m) { + mutex_lock(m); + return m; +} +INLINE void rwlock_ptr_unlock_r(rwlock_r_lock_t *m) { + rwlock_unlock_r(m); } -INLINE void rtpe_auto_cleanup_rwlock_r(rwlock_t **m) { - rwlock_unlock_r(*m); +INLINE rwlock_r_lock_t *rwlock_auto_lock_r(rwlock_t *m) { + rwlock_lock_r(m); + return m; } -INLINE void rtpe_auto_cleanup_rwlock_w(rwlock_t **m) { - rwlock_unlock_w(*m); +INLINE void rwlock_ptr_unlock_w(rwlock_w_lock_t *m) { + rwlock_unlock_w(m); } +INLINE rwlock_w_lock_t *rwlock_auto_lock_w(rwlock_t *m) { + rwlock_lock_w(m); + return m; +} + +G_DEFINE_AUTOPTR_CLEANUP_FUNC(mutex_lock_t, mutex_ptr_unlock) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(rwlock_r_lock_t, rwlock_ptr_unlock_w) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(rwlock_w_lock_t, rwlock_ptr_unlock_r) #define CONCAT2(a, b) a ## b #define CONCAT(a, b) CONCAT2(a, b) -#define LOCK(m) AUTO_CLEANUP(mutex_t *CONCAT(__auto_lock_, __COUNTER__), rtpe_auto_cleanup_mutex) \ - __attribute__((unused)) = m; \ - mutex_lock(m) -#define RWLOCK_R(m) AUTO_CLEANUP(rwlock_t *CONCAT(__auto_lock_, __COUNTER__), rtpe_auto_cleanup_rwlock_r) \ - __attribute__((unused)) = m; \ - rwlock_lock_r(m) -#define RWLOCK_W(m) AUTO_CLEANUP(rwlock_t *CONCAT(__auto_lock_, __COUNTER__), rtpe_auto_cleanup_rwlock_w) \ - __attribute__((unused)) = m; \ - rwlock_lock_w(m) - +#define LOCK(m) g_autoptr(mutex_lock_t) CONCAT(__auto_lock_, __COUNTER__) \ + __attribute__((unused)) = mutex_auto_lock(m) +#define RWLOCK_R(m) g_autoptr(rwlock_r_lock_t) CONCAT(__auto_lock_, __COUNTER__) \ + __attribute__((unused)) = rwlock_auto_lock_r(m) +#define RWLOCK_W(m) g_autoptr(rwlock_w_lock_t) CONCAT(__auto_lock_, __COUNTER__) \ + __attribute__((unused)) = rwlock_auto_lock_w(m)