Make ao2 global objects not always use the debug version of the ao2_ref() calls.
authorRichard Mudgett <rmudgett@digium.com>
Tue, 14 May 2013 19:03:26 +0000 (19:03 +0000)
committerRichard Mudgett <rmudgett@digium.com>
Tue, 14 May 2013 19:03:26 +0000 (19:03 +0000)
The debug versions of ao2_ref() should only be used if REF_DEBUG is
enabled so nothing is written to /tmp/refs unexpectedly.

(closes issue ASTERISK-21785)
Reported by: abelbeck
Patches:
      jira_asterisk_21785_v11.patch (license #5621) patch uploaded by rmudgett
Tested by: abelbeck
........

Merged revisions 388700 from http://svn.asterisk.org/svn/asterisk/branches/11

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@388701 65c4cc65-6c06-0410-ace0-fbb531ad65f3

include/asterisk/astobj2.h
main/astobj2.c

index 502cc74..d8a997b 100644 (file)
@@ -635,11 +635,20 @@ struct ao2_global_obj {
  *
  * \return Nothing
  */
+#ifdef REF_DEBUG
 #define ao2_t_global_obj_release(holder, tag)  \
        __ao2_global_obj_release(&holder, (tag), __FILE__, __LINE__, __PRETTY_FUNCTION__, #holder)
 #define ao2_global_obj_release(holder) \
        __ao2_global_obj_release(&holder, "", __FILE__, __LINE__, __PRETTY_FUNCTION__, #holder)
 
+#else
+
+#define ao2_t_global_obj_release(holder, tag)  \
+       __ao2_global_obj_release(&holder, NULL, __FILE__, __LINE__, __PRETTY_FUNCTION__, #holder)
+#define ao2_global_obj_release(holder) \
+       __ao2_global_obj_release(&holder, NULL, __FILE__, __LINE__, __PRETTY_FUNCTION__, #holder)
+#endif
+
 void __ao2_global_obj_release(struct ao2_global_obj *holder, const char *tag, const char *file, int line, const char *func, const char *name);
 
 /*!
@@ -657,11 +666,20 @@ void __ao2_global_obj_release(struct ao2_global_obj *holder, const char *tag, co
  * \retval Reference to previous global ao2 object stored.
  * \retval NULL if no object available.
  */
+#ifdef REF_DEBUG
 #define ao2_t_global_obj_replace(holder, obj, tag)     \
        __ao2_global_obj_replace(&holder, (obj), (tag), __FILE__, __LINE__, __PRETTY_FUNCTION__, #holder)
 #define ao2_global_obj_replace(holder, obj)    \
        __ao2_global_obj_replace(&holder, (obj), "", __FILE__, __LINE__, __PRETTY_FUNCTION__, #holder)
 
+#else
+
+#define ao2_t_global_obj_replace(holder, obj, tag)     \
+       __ao2_global_obj_replace(&holder, (obj), NULL, __FILE__, __LINE__, __PRETTY_FUNCTION__, #holder)
+#define ao2_global_obj_replace(holder, obj)    \
+       __ao2_global_obj_replace(&holder, (obj), NULL, __FILE__, __LINE__, __PRETTY_FUNCTION__, #holder)
+#endif
+
 void *__ao2_global_obj_replace(struct ao2_global_obj *holder, void *obj, const char *tag, const char *file, int line, const char *func, const char *name);
 
 /*!
@@ -680,10 +698,20 @@ void *__ao2_global_obj_replace(struct ao2_global_obj *holder, void *obj, const c
  * \retval 0 The global object was previously empty
  * \retval 1 The global object was not previously empty
  */
+#ifdef REF_DEBUG
 #define ao2_t_global_obj_replace_unref(holder, obj, tag)       \
        __ao2_global_obj_replace_unref(&holder, (obj), (tag), __FILE__, __LINE__, __PRETTY_FUNCTION__, #holder)
 #define ao2_global_obj_replace_unref(holder, obj)      \
        __ao2_global_obj_replace_unref(&holder, (obj), "", __FILE__, __LINE__, __PRETTY_FUNCTION__, #holder)
+
+#else
+
+#define ao2_t_global_obj_replace_unref(holder, obj, tag)       \
+       __ao2_global_obj_replace_unref(&holder, (obj), NULL, __FILE__, __LINE__, __PRETTY_FUNCTION__, #holder)
+#define ao2_global_obj_replace_unref(holder, obj)      \
+       __ao2_global_obj_replace_unref(&holder, (obj), NULL, __FILE__, __LINE__, __PRETTY_FUNCTION__, #holder)
+#endif
+
 int __ao2_global_obj_replace_unref(struct ao2_global_obj *holder, void *obj, const char *tag, const char *file, int line, const char *func, const char *name);
 
 /*!
@@ -696,11 +724,20 @@ int __ao2_global_obj_replace_unref(struct ao2_global_obj *holder, void *obj, con
  * \retval Reference to current ao2 object stored in the holder.
  * \retval NULL if no object available.
  */
+#ifdef REF_DEBUG
 #define ao2_t_global_obj_ref(holder, tag)      \
        __ao2_global_obj_ref(&holder, (tag), __FILE__, __LINE__, __PRETTY_FUNCTION__, #holder)
 #define ao2_global_obj_ref(holder)     \
        __ao2_global_obj_ref(&holder, "", __FILE__, __LINE__, __PRETTY_FUNCTION__, #holder)
 
+#else
+
+#define ao2_t_global_obj_ref(holder, tag)      \
+       __ao2_global_obj_ref(&holder, NULL, __FILE__, __LINE__, __PRETTY_FUNCTION__, #holder)
+#define ao2_global_obj_ref(holder)     \
+       __ao2_global_obj_ref(&holder, NULL, __FILE__, __LINE__, __PRETTY_FUNCTION__, #holder)
+#endif
+
 void *__ao2_global_obj_ref(struct ao2_global_obj *holder, const char *tag, const char *file, int line, const char *func, const char *name);
 
 
index 8ccc36c..9f5e05d 100644 (file)
@@ -684,7 +684,11 @@ void __ao2_global_obj_release(struct ao2_global_obj *holder, const char *tag, co
 
        /* Release the held ao2 object. */
        if (holder->obj) {
-               __ao2_ref_debug(holder->obj, -1, tag, file, line, func);
+               if (tag) {
+                       __ao2_ref_debug(holder->obj, -1, tag, file, line, func);
+               } else {
+                       __ao2_ref(holder->obj, -1);
+               }
                holder->obj = NULL;
        }
 
@@ -708,7 +712,11 @@ void *__ao2_global_obj_replace(struct ao2_global_obj *holder, void *obj, const c
        }
 
        if (obj) {
-               __ao2_ref_debug(obj, +1, tag, file, line, func);
+               if (tag) {
+                       __ao2_ref_debug(obj, +1, tag, file, line, func);
+               } else {
+                       __ao2_ref(obj, +1);
+               }
        }
        obj_old = holder->obj;
        holder->obj = obj;
@@ -724,7 +732,11 @@ int __ao2_global_obj_replace_unref(struct ao2_global_obj *holder, void *obj, con
 
        obj_old = __ao2_global_obj_replace(holder, obj, tag, file, line, func, name);
        if (obj_old) {
-               __ao2_ref_debug(obj_old, -1, tag, file, line, func);
+               if (tag) {
+                       __ao2_ref_debug(obj_old, -1, tag, file, line, func);
+               } else {
+                       __ao2_ref(obj_old, -1);
+               }
                return 1;
        }
        return 0;
@@ -749,7 +761,11 @@ void *__ao2_global_obj_ref(struct ao2_global_obj *holder, const char *tag, const
 
        obj = holder->obj;
        if (obj) {
-               __ao2_ref_debug(obj, +1, tag, file, line, func);
+               if (tag) {
+                       __ao2_ref_debug(obj, +1, tag, file, line, func);
+               } else {
+                       __ao2_ref(obj, +1);
+               }
        }
 
        __ast_rwlock_unlock(file, line, func, &holder->lock, name);