summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorey Farrell <git@cfware.com>2014-07-11 21:10:45 +0000
committerCorey Farrell <git@cfware.com>2014-07-11 21:10:45 +0000
commit694b68e54466c1c2c6a32acbe5cb74db0dad8e80 (patch)
tree09526d201fec58cd6391b888849d52aadbba0ebf
parent6e5d843a5632c7c4100b5eab2fffc3557d6f5d0c (diff)
astobj2: tweak ao2_replace to do nothing when it would be a NoOp
This change causes ao2_replace to do nothing when src == dst. This avoids REF_DEBUG logging when we're not actually doing anything. Review: https://reviewboard.asterisk.org/r/3743/ ........ Merged revisions 418396 from http://svn.asterisk.org/svn/asterisk/branches/12 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@418397 65c4cc65-6c06-0410-ace0-fbb531ad65f3
-rw-r--r--include/asterisk/astobj2.h14
1 files changed, 8 insertions, 6 deletions
diff --git a/include/asterisk/astobj2.h b/include/asterisk/astobj2.h
index d1c75ff5f..12b1b639b 100644
--- a/include/asterisk/astobj2.h
+++ b/include/asterisk/astobj2.h
@@ -561,13 +561,15 @@ int __ao2_ref(void *o, int delta);
{\
typeof(dst) *__dst_ ## __LINE__ = &dst; \
typeof(src) __src_ ## __LINE__ = src; \
- if (__src_ ## __LINE__) {\
- ao2_ref(__src_ ## __LINE__, +1); \
+ if (__src_ ## __LINE__ != *__dst_ ## __LINE__) { \
+ if (__src_ ## __LINE__) {\
+ ao2_ref(__src_ ## __LINE__, +1); \
+ } \
+ if (*__dst_ ## __LINE__) {\
+ ao2_ref(*__dst_ ## __LINE__, -1); \
+ } \
+ *__dst_ ## __LINE__ = __src_ ## __LINE__; \
} \
- if (*__dst_ ## __LINE__) {\
- ao2_ref(*__dst_ ## __LINE__, -1); \
- } \
- *__dst_ ## __LINE__ = __src_ ## __LINE__; \
}
/*! @} */