mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-21 12:30:41 +00:00
Make ao2 global objects not always use the debug version of the ao2_ref() calls.
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
This commit is contained in:
@@ -635,11 +635,20 @@ struct ao2_global_obj {
|
|||||||
*
|
*
|
||||||
* \return Nothing
|
* \return Nothing
|
||||||
*/
|
*/
|
||||||
|
#ifdef REF_DEBUG
|
||||||
#define ao2_t_global_obj_release(holder, tag) \
|
#define ao2_t_global_obj_release(holder, tag) \
|
||||||
__ao2_global_obj_release(&holder, (tag), __FILE__, __LINE__, __PRETTY_FUNCTION__, #holder)
|
__ao2_global_obj_release(&holder, (tag), __FILE__, __LINE__, __PRETTY_FUNCTION__, #holder)
|
||||||
#define ao2_global_obj_release(holder) \
|
#define ao2_global_obj_release(holder) \
|
||||||
__ao2_global_obj_release(&holder, "", __FILE__, __LINE__, __PRETTY_FUNCTION__, #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);
|
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 Reference to previous global ao2 object stored.
|
||||||
* \retval NULL if no object available.
|
* \retval NULL if no object available.
|
||||||
*/
|
*/
|
||||||
|
#ifdef REF_DEBUG
|
||||||
#define ao2_t_global_obj_replace(holder, obj, tag) \
|
#define ao2_t_global_obj_replace(holder, obj, tag) \
|
||||||
__ao2_global_obj_replace(&holder, (obj), (tag), __FILE__, __LINE__, __PRETTY_FUNCTION__, #holder)
|
__ao2_global_obj_replace(&holder, (obj), (tag), __FILE__, __LINE__, __PRETTY_FUNCTION__, #holder)
|
||||||
#define ao2_global_obj_replace(holder, obj) \
|
#define ao2_global_obj_replace(holder, obj) \
|
||||||
__ao2_global_obj_replace(&holder, (obj), "", __FILE__, __LINE__, __PRETTY_FUNCTION__, #holder)
|
__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);
|
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 0 The global object was previously empty
|
||||||
* \retval 1 The global object was not previously empty
|
* \retval 1 The global object was not previously empty
|
||||||
*/
|
*/
|
||||||
|
#ifdef REF_DEBUG
|
||||||
#define ao2_t_global_obj_replace_unref(holder, obj, tag) \
|
#define ao2_t_global_obj_replace_unref(holder, obj, tag) \
|
||||||
__ao2_global_obj_replace_unref(&holder, (obj), (tag), __FILE__, __LINE__, __PRETTY_FUNCTION__, #holder)
|
__ao2_global_obj_replace_unref(&holder, (obj), (tag), __FILE__, __LINE__, __PRETTY_FUNCTION__, #holder)
|
||||||
#define ao2_global_obj_replace_unref(holder, obj) \
|
#define ao2_global_obj_replace_unref(holder, obj) \
|
||||||
__ao2_global_obj_replace_unref(&holder, (obj), "", __FILE__, __LINE__, __PRETTY_FUNCTION__, #holder)
|
__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);
|
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 Reference to current ao2 object stored in the holder.
|
||||||
* \retval NULL if no object available.
|
* \retval NULL if no object available.
|
||||||
*/
|
*/
|
||||||
|
#ifdef REF_DEBUG
|
||||||
#define ao2_t_global_obj_ref(holder, tag) \
|
#define ao2_t_global_obj_ref(holder, tag) \
|
||||||
__ao2_global_obj_ref(&holder, (tag), __FILE__, __LINE__, __PRETTY_FUNCTION__, #holder)
|
__ao2_global_obj_ref(&holder, (tag), __FILE__, __LINE__, __PRETTY_FUNCTION__, #holder)
|
||||||
#define ao2_global_obj_ref(holder) \
|
#define ao2_global_obj_ref(holder) \
|
||||||
__ao2_global_obj_ref(&holder, "", __FILE__, __LINE__, __PRETTY_FUNCTION__, #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);
|
void *__ao2_global_obj_ref(struct ao2_global_obj *holder, const char *tag, const char *file, int line, const char *func, const char *name);
|
||||||
|
|
||||||
|
|
||||||
|
@@ -684,7 +684,11 @@ void __ao2_global_obj_release(struct ao2_global_obj *holder, const char *tag, co
|
|||||||
|
|
||||||
/* Release the held ao2 object. */
|
/* Release the held ao2 object. */
|
||||||
if (holder->obj) {
|
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;
|
holder->obj = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -708,7 +712,11 @@ void *__ao2_global_obj_replace(struct ao2_global_obj *holder, void *obj, const c
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
obj_old = holder->obj;
|
obj_old = holder->obj;
|
||||||
holder->obj = 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);
|
obj_old = __ao2_global_obj_replace(holder, obj, tag, file, line, func, name);
|
||||||
if (obj_old) {
|
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 1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@@ -749,7 +761,11 @@ void *__ao2_global_obj_ref(struct ao2_global_obj *holder, const char *tag, const
|
|||||||
|
|
||||||
obj = holder->obj;
|
obj = holder->obj;
|
||||||
if (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);
|
__ast_rwlock_unlock(file, line, func, &holder->lock, name);
|
||||||
|
Reference in New Issue
Block a user