Skip to content
Snippets Groups Projects
Commit 682357dc authored by George Joseph's avatar George Joseph
Browse files

astobj2: Add an ao2_replace macro to astobj2.h

This macro replaces 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.

src's ref count is bumped if it's non-NULL.
dst's ref count is decremented if it's non-NULL.
src is assigned to dst,

This patch was reviewed on IRC by coreyfarrell and mjordan.
 
Tested by: George Joseph
........

Merged revisions 416995 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@416996 65c4cc65-6c06-0410-ace0-fbb531ad65f3
parent 1a6db554
No related branches found
No related tags found
No related merge requests found
......@@ -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
......
......@@ -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)
......
......@@ -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. */
......
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