This fixes an issue with requiring SCOPED_LOCK to be the last variable
declaration and removes duplicate code in the process.
Review: https://reviewboard.asterisk.org/r/2665/
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@393919
65c4cc65-6c06-0410-ace0-
fbb531ad65f3
* \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