diff --git a/include/asterisk/lock.h b/include/asterisk/lock.h
index 4b1752cc42fb305200e8071e53c3c4f30c078165..6ede7de501d9e0491076145cc003189bac9c597c 100644
--- a/include/asterisk/lock.h
+++ b/include/asterisk/lock.h
@@ -600,9 +600,7 @@ static void  __attribute__((destructor)) fini_##rwlock(void) \
  * \param unlockfunc The function to call to unlock the lock
  */
 #define SCOPED_LOCK(varname, lock, lockfunc, unlockfunc) \
-	auto void _dtor_ ## varname (typeof((lock)) * v); \
-	auto void _dtor_ ## varname (typeof((lock)) * v) { unlockfunc(*v); } \
-	typeof((lock)) varname __attribute__((cleanup(_dtor_ ## varname))) = lock; lockfunc((lock))
+	RAII_VAR(typeof((lock)), varname, ({lockfunc((lock)); (lock); }), unlockfunc)
 
 /*!
  * \brief scoped lock specialization for mutexes