@ -402,8 +402,7 @@ typedef void (*ao2_destructor_fn)(void *);
* @ {
*/
# ifdef REF_DEBUG
# if defined(REF_DEBUG) || defined(__AST_DEBUG_MALLOC)
# define ao2_t_alloc(data_size, destructor_fn, debug_msg) __ao2_alloc_debug((data_size), (destructor_fn), (debug_msg), __FILE__, __LINE__, __PRETTY_FUNCTION__)
# define ao2_alloc(data_size, destructor_fn) __ao2_alloc_debug((data_size), (destructor_fn), "", __FILE__, __LINE__, __PRETTY_FUNCTION__)
@ -414,8 +413,10 @@ typedef void (*ao2_destructor_fn)(void *);
# define ao2_alloc(data_size, destructor_fn) __ao2_alloc((data_size), (destructor_fn))
# endif
void * __ao2_alloc_debug ( const size_t data_size , ao2_destructor_fn destructor_fn , char * tag , char * file , int line , const char * funcname ) ;
void * __ao2_alloc ( const size_t data_size , ao2_destructor_fn destructor_fn ) ;
/*! @} */
/*! \brief
@ -442,14 +443,20 @@ void *__ao2_alloc(const size_t data_size, ao2_destructor_fn destructor_fn);
*/
# ifdef REF_DEBUG
# define ao2_t_ref(o,delta,tag) __ao2_ref_debug((o), (delta), (tag), __FILE__, __LINE__, __PRETTY_FUNCTION__)
# define ao2_ref(o,delta) __ao2_ref_debug((o), (delta), "", __FILE__, __LINE__, __PRETTY_FUNCTION__)
# else
# define ao2_t_ref(o,delta,tag) __ao2_ref((o), (delta))
# define ao2_ref(o,delta) __ao2_ref((o), (delta))
# endif
int __ao2_ref_debug ( void * o , int delta , char * tag , char * file , int line , const char * funcname ) ;
int __ao2_ref ( void * o , int delta ) ;
/*! @} */
/*! \brief
@ -691,23 +698,29 @@ struct ao2_container;
* destructor is set implicitly .
*/
# ifdef REF_DEBUG
# if defined(REF_DEBUG) || defined(__AST_DEBUG_MALLOC)
# define ao2_t_container_alloc(arg1,arg2,arg3,arg4) __ao2_container_alloc_debug((arg1), (arg2), (arg3), (arg4), __FILE__, __LINE__, __PRETTY_FUNCTION__)
# define ao2_container_alloc(arg1,arg2,arg3) __ao2_container_alloc_debug((arg1), (arg2), (arg3), "", __FILE__, __LINE__, __PRETTY_FUNCTION__)
# else
# define ao2_t_container_alloc(arg1,arg2,arg3,arg4) __ao2_container_alloc((arg1), (arg2), (arg3))
# define ao2_container_alloc(arg1,arg2,arg3) __ao2_container_alloc((arg1), (arg2), (arg3))
# endif
struct ao2_container * __ao2_container_alloc ( const unsigned int n_buckets ,
ao2_hash_fn * hash_fn , ao2_callback_fn * cmp_fn ) ;
ao2_hash_fn * hash_fn , ao2_callback_fn * cmp_fn ) ;
struct ao2_container * __ao2_container_alloc_debug ( const unsigned int n_buckets ,
ao2_hash_fn * hash_fn , ao2_callback_fn * cmp_fn ,
char * tag , char * file , int line , const char * funcname ) ;
ao2_hash_fn * hash_fn , ao2_callback_fn * cmp_fn ,
char * tag , char * file , int line , const char * funcname ) ;
/*! \brief
* Returns the number of elements in a container .
*/
int ao2_container_count ( struct ao2_container * c ) ;
/*@} */
/*! \name Object Management
@ -738,15 +751,19 @@ int ao2_container_count(struct ao2_container *c);
# define ao2_t_link(arg1, arg2, arg3) __ao2_link_debug((arg1), (arg2), (arg3), __FILE__, __LINE__, __PRETTY_FUNCTION__)
# define ao2_link(arg1, arg2) __ao2_link_debug((arg1), (arg2), "", __FILE__, __LINE__, __PRETTY_FUNCTION__)
# else
# define ao2_t_link(arg1, arg2, arg3) __ao2_link((arg1), (arg2))
# define ao2_link(arg1, arg2) __ao2_link((arg1), (arg2))
# endif
void * __ao2_link_debug ( struct ao2_container * c , void * new_obj , char * tag , char * file , int line , const char * funcname ) ;
void * __ao2_link ( struct ao2_container * c , void * newobj ) ;
/*!
* \ brief Remove an object from the container
* \ brief Remove an object from a container
*
* \ param c the container
* \ param obj the object to unlink
@ -762,12 +779,17 @@ void *__ao2_link(struct ao2_container *c, void *newobj);
* refcount will be decremented ) .
*/
# ifdef REF_DEBUG
# define ao2_t_unlink(arg1, arg2, arg3) __ao2_unlink_debug((arg1), (arg2), (arg3), __FILE__, __LINE__, __PRETTY_FUNCTION__)
# define ao2_unlink(arg1, arg2) __ao2_unlink_debug((arg1), (arg2), "", __FILE__, __LINE__, __PRETTY_FUNCTION__)
# else
# define ao2_t_unlink(arg1, arg2, arg3) __ao2_unlink((arg1), (arg2))
# define ao2_unlink(arg1, arg2) __ao2_unlink((arg1), (arg2))
# endif
void * __ao2_unlink_debug ( struct ao2_container * c , void * obj , char * tag , char * file , int line , const char * funcname ) ;
void * __ao2_unlink ( struct ao2_container * c , void * obj ) ;
@ -777,6 +799,7 @@ struct ao2_list {
struct ao2_list * next ;
void * obj ; /* pointer to the user portion of the object */
} ;
/*@} */
/*! \brief
@ -859,18 +882,21 @@ struct ao2_list {
* @ {
*/
# ifdef REF_DEBUG
# define ao2_t_callback(c,flags,cb_fn,arg,tag) __ao2_callback_debug((c), (flags), (cb_fn), (arg), (tag), __FILE__, __LINE__, __PRETTY_FUNCTION__)
# define ao2_callback(c,flags,cb_fn,arg) __ao2_callback_debug((c), (flags), (cb_fn), (arg), "", __FILE__, __LINE__, __PRETTY_FUNCTION__)
# else
# define ao2_t_callback(c,flags,cb_fn,arg,tag) __ao2_callback((c), (flags), (cb_fn), (arg))
# define ao2_callback(c,flags,cb_fn,arg) __ao2_callback((c), (flags), (cb_fn), (arg))
# endif
void * __ao2_callback_debug ( struct ao2_container * c , enum search_flags flags ,
ao2_callback_fn * cb_fn , void * arg , char * tag ,
char * file , int line , const char * funcname ) ;
void * __ao2_callback ( struct ao2_container * c ,
enum search_flags flags ,
ao2_callback_fn * cb_fn , void * arg ) ;
void * __ao2_callback_debug ( struct ao2_container * c , enum search_flags flags , ao2_callback_fn * cb_fn ,
void * arg , char * tag , char * file , int line , const char * funcname ) ;
void * __ao2_callback ( struct ao2_container * c , enum search_flags flags , ao2_callback_fn * cb_fn , void * arg ) ;
/*! @} */
/*! \brief
@ -889,30 +915,40 @@ void *__ao2_callback(struct ao2_container *c,
* \ see ao2_callback ( )
*/
# ifdef REF_DEBUG
# define ao2_t_callback_data(arg1,arg2,arg3,arg4,arg5,arg6) __ao2_callback_data_debug((arg1), (arg2), (arg3), (arg4), (arg5), (arg6), __FILE__, __LINE__, __PRETTY_FUNCTION__)
# define ao2_callback_data(arg1,arg2,arg3,arg4,arg5) __ao2_callback_data_debug((arg1), (arg2), (arg3), (arg4), (arg5), "", __FILE__, __LINE__, __PRETTY_FUNCTION__)
# else
# define ao2_t_callback_data(arg1,arg2,arg3,arg4,arg5,arg6) __ao2_callback_data((arg1), (arg2), (arg3), (arg4), (arg5))
# define ao2_callback_data(arg1,arg2,arg3,arg4,arg5) __ao2_callback_data((arg1), (arg2), (arg3), (arg4), (arg5))
# endif
void * __ao2_callback_data_debug ( struct ao2_container * c , enum search_flags flags ,
ao2_callback_data_fn * cb_fn , void * arg , void * data , char * tag ,
char * file , int line , const char * funcname ) ;
void * __ao2_callback_data ( struct ao2_container * c ,
enum search_flags flags ,
ao2_callback_data_fn * cb_fn , void * arg , void * data ) ;
ao2_callback_data_fn * cb_fn , void * arg , void * data , char * tag ,
char * file , int line , const char * funcname ) ;
void * __ao2_callback_data ( struct ao2_container * c , enum search_flags flags ,
ao2_callback_data_fn * cb_fn , void * arg , void * data ) ;
/*! ao2_find() is a short hand for ao2_callback(c, flags, c->cmp_fn, arg)
* XXX possibly change order of arguments ?
*/
# ifdef REF_DEBUG
# define ao2_t_find(arg1,arg2,arg3,arg4) __ao2_find_debug((arg1), (arg2), (arg3), (arg4), __FILE__, __LINE__, __PRETTY_FUNCTION__)
# define ao2_find(arg1,arg2,arg3) __ao2_find_debug((arg1), (arg2), (arg3), "", __FILE__, __LINE__, __PRETTY_FUNCTION__)
# else
# define ao2_t_find(arg1,arg2,arg3,arg4) __ao2_find((arg1), (arg2), (arg3))
# define ao2_find(arg1,arg2,arg3) __ao2_find((arg1), (arg2), (arg3))
# endif
void * __ao2_find_debug ( struct ao2_container * c , void * arg , enum search_flags flags , char * tag , char * file , int line , const char * funcname ) ;
void * __ao2_find_debug ( struct ao2_container * c , void * arg , enum search_flags flags , char * tag ,
char * file , int line , const char * funcname ) ;
void * __ao2_find ( struct ao2_container * c , void * arg , enum search_flags flags ) ;
/*! \brief
@ -1011,16 +1047,23 @@ struct ao2_iterator {
searches for the next pointer */
struct ao2_iterator ao2_iterator_init ( struct ao2_container * c , int flags ) ;
# ifdef REF_DEBUG
# define ao2_t_iterator_next(arg1, arg2) __ao2_iterator_next_debug((arg1), (arg2), __FILE__, __LINE__, __PRETTY_FUNCTION__)
# define ao2_iterator_next(arg1) __ao2_iterator_next_debug((arg1), "", __FILE__, __LINE__, __PRETTY_FUNCTION__)
# else
# define ao2_t_iterator_next(arg1, arg2) __ao2_iterator_next((arg1))
# define ao2_iterator_next(arg1) __ao2_iterator_next((arg1))
# endif
void * __ao2_iterator_next_debug ( struct ao2_iterator * a , char * tag , char * file , int line , const char * funcname ) ;
void * __ao2_iterator_next ( struct ao2_iterator * a ) ;
/* extra functions */
void ao2_bt ( void ) ; /* backtrace */
# endif /* _ASTERISK_ASTOBJ2_H */