mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-02 10:22:46 +00:00
Fix/Update clang-RAII macro implementation
- When you need to refer to 'variable XXX' outside a block, it needs to be declared as '__block XXX', otherwise it will not be available with- in the block, making updating that variable hard to do, and ast_free lead to issues. - Removed the #error message because it creates complications when compiling external projects against asterisk For example when using a different compiler than the one used to compile asterisk. The warning/error should be generated during the configure process not the compilation process ASTERISK-24917 Change-Id: I12091228090e90831bf2b498293858f46ea7a8c2
This commit is contained in:
committed by
Mark Michelson
parent
b74b2cdcda
commit
2be9cc2643
@@ -1031,19 +1031,13 @@ char *ast_utils_which(const char *binary, char *fullpath, size_t fullpath_size);
|
||||
*/
|
||||
|
||||
#if defined(__clang__)
|
||||
|
||||
#if defined(__has_feature) && __has_feature(blocks)
|
||||
typedef void (^_raii_cleanup_block_t)(void);
|
||||
static inline void _raii_cleanup_block(_raii_cleanup_block_t *b) { (*b)(); }
|
||||
|
||||
#define RAII_VAR(vartype, varname, initval, dtor) \
|
||||
_raii_cleanup_block_t _raii_cleanup_ ## varname __attribute__((cleanup(_raii_cleanup_block),unused)) = NULL; \
|
||||
vartype varname = initval; \
|
||||
_raii_cleanup_ ## varname = ^{ dtor(varname); }
|
||||
|
||||
#else
|
||||
#error "CLANG must support the 'blocks' feature to compile Asterisk."
|
||||
#endif /* #if defined(__has_feature) && __has_feature(blocks) */
|
||||
__block vartype varname = initval; \
|
||||
_raii_cleanup_ ## varname = ^{ {(void)dtor(varname);} }
|
||||
|
||||
#elif defined(__GNUC__)
|
||||
|
||||
|
Reference in New Issue
Block a user