Skip to content
Snippets Groups Projects
Commit 42955825 authored by Diederik de Groot's avatar Diederik de Groot Committed by Matt Jordan
Browse files

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
parent fc79cae5
No related branches found
No related tags found
No related merge requests found
......@@ -950,19 +950,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__)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment