diff options
-rw-r--r-- | Makefile | 1 | ||||
-rw-r--r-- | Makefile.rules | 2 | ||||
-rw-r--r-- | include/asterisk/astobj2.h | 20 |
3 files changed, 22 insertions, 1 deletions
@@ -188,7 +188,6 @@ ifeq ($(AST_DEVMODE),yes) _ASTCFLAGS+=-Werror _ASTCFLAGS+=-Wunused _ASTCFLAGS+=$(AST_DECLARATION_AFTER_STATEMENT) - _ASTCFLAGS+=$(AST_FORTIFY_SOURCE) _ASTCFLAGS+=$(AST_TRAMPOLINES) _ASTCFLAGS+=-Wundef _ASTCFLAGS+=-Wmissing-format-attribute diff --git a/Makefile.rules b/Makefile.rules index 35f522ed0..815038117 100644 --- a/Makefile.rules +++ b/Makefile.rules @@ -82,6 +82,8 @@ CXX_LIBS=$(PTHREAD_LIBS) $(LIBS) # and if that doesn't fail then compile again with optimizer disabled ifeq ($(findstring DONT_OPTIMIZE,$(MENUSELECT_CFLAGS))$(AST_DEVMODE),DONT_OPTIMIZEyes) COMPILE_DOUBLE=yes +else +_ASTCFLAGS+=$(AST_FORTIFY_SOURCE) endif ifeq ($(findstring BUILD_NATIVE,$(MENUSELECT_CFLAGS)),BUILD_NATIVE) diff --git a/include/asterisk/astobj2.h b/include/asterisk/astobj2.h index d113cb38c..d1c75ff5f 100644 --- a/include/asterisk/astobj2.h +++ b/include/asterisk/astobj2.h @@ -550,6 +550,26 @@ unsigned int ao2_options_get(void *obj); int __ao2_ref_debug(void *o, int delta, const char *tag, const char *file, int line, const char *func); int __ao2_ref(void *o, int delta); +/*! + * \since 12.4.0 + * \brief Replace one object reference with another cleaning up the original. + * + * \param dst Pointer to the object that will be cleaned up. + * \param src Pointer to the object replacing it. + */ +#define ao2_replace(dst, src) \ + {\ + typeof(dst) *__dst_ ## __LINE__ = &dst; \ + typeof(src) __src_ ## __LINE__ = src; \ + if (__src_ ## __LINE__) {\ + ao2_ref(__src_ ## __LINE__, +1); \ + } \ + if (*__dst_ ## __LINE__) {\ + ao2_ref(*__dst_ ## __LINE__, -1); \ + } \ + *__dst_ ## __LINE__ = __src_ ## __LINE__; \ + } + /*! @} */ /*! \brief Which lock to request. */ |