mirror of
https://github.com/asterisk/asterisk.git
synced 2025-11-02 03:48:02 +00:00
Add ability to pass arbitrary data to the ao2_callback_fn (called from
ao2_callback and ao2_find). Currently, passing OBJ_POINTER to either
of these mandates that the passed 'arg' is a hashable object, making
searching for an ao2 object based on outside criteria difficult.
Reviewed by Russell and Mark M. via ReviewBoard:
http://reviewboard.digium.com/r/36/
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@155401 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -589,7 +589,7 @@ to define callback and hash functions and their arguments.
|
||||
* The return values are a combination of enum _cb_results.
|
||||
* Callback functions are used to search or manipulate objects in a container,
|
||||
*/
|
||||
typedef int (ao2_callback_fn)(void *obj, void *arg, int flags);
|
||||
typedef int (ao2_callback_fn)(void *obj, void *arg, void *data, int flags);
|
||||
|
||||
/*! \brief a very common callback is one that matches by address. */
|
||||
ao2_callback_fn ao2_match_by_addr;
|
||||
@@ -822,31 +822,31 @@ struct ao2_list {
|
||||
* be used to free the additional reference possibly created by this function.
|
||||
*/
|
||||
#ifdef REF_DEBUG
|
||||
#define ao2_t_callback(arg1,arg2,arg3,arg4,arg5) _ao2_callback_debug((arg1), (arg2), (arg3), (arg4), (arg5), __FILE__, __LINE__, __PRETTY_FUNCTION__)
|
||||
#define ao2_callback(arg1,arg2,arg3,arg4) _ao2_callback_debug((arg1), (arg2), (arg3), (arg4), "", __FILE__, __LINE__, __PRETTY_FUNCTION__)
|
||||
#define ao2_t_callback(arg1,arg2,arg3,arg4,arg5,arg6) _ao2_callback_debug((arg1), (arg2), (arg3), (arg4), (arg5), (arg6), __FILE__, __LINE__, __PRETTY_FUNCTION__)
|
||||
#define ao2_callback(arg1,arg2,arg3,arg4,arg5) _ao2_callback_debug((arg1), (arg2), (arg3), (arg4), (arg5), "", __FILE__, __LINE__, __PRETTY_FUNCTION__)
|
||||
#else
|
||||
#define ao2_t_callback(arg1,arg2,arg3,arg4,arg5) _ao2_callback((arg1), (arg2), (arg3), (arg4))
|
||||
#define ao2_callback(arg1,arg2,arg3,arg4) _ao2_callback((arg1), (arg2), (arg3), (arg4))
|
||||
#define ao2_t_callback(arg1,arg2,arg3,arg4,arg5,arg6) _ao2_callback((arg1), (arg2), (arg3), (arg4), (arg5))
|
||||
#define ao2_callback(arg1,arg2,arg3,arg4,arg5) _ao2_callback((arg1), (arg2), (arg3), (arg4), (arg5))
|
||||
#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);
|
||||
ao2_callback_fn *cb_fn, void *arg, void *data, 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);
|
||||
enum search_flags flags,
|
||||
ao2_callback_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__)
|
||||
#define ao2_t_find(arg1,arg2,arg3,arg4,arg5) _ao2_find_debug((arg1), (arg2), (arg3), (arg4), (arg5), __FILE__, __LINE__, __PRETTY_FUNCTION__)
|
||||
#define ao2_find(arg1,arg2,arg3,arg4) _ao2_find_debug((arg1), (arg2), (arg3), (arg4), "", __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))
|
||||
#define ao2_t_find(arg1,arg2,arg3,arg4,arg5) _ao2_find((arg1), (arg2), (arg3), (arg4))
|
||||
#define ao2_find(arg1,arg2,arg3,arg4) _ao2_find((arg1), (arg2), (arg3), (arg4))
|
||||
#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(struct ao2_container *c, void *arg, enum search_flags flags);
|
||||
void *_ao2_find_debug(struct ao2_container *c, void *arg, void *data, enum search_flags flags, char *tag, char *file, int line, const char *funcname);
|
||||
void *_ao2_find(struct ao2_container *c, void *arg, void *data, enum search_flags flags);
|
||||
|
||||
/*! \brief
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user