diff options
-rw-r--r-- | bridges/bridge_native_rtp.c | 5 | ||||
-rw-r--r-- | channels/iax2/include/astobj.h (renamed from include/asterisk/astobj.h) | 0 | ||||
-rw-r--r-- | channels/iax2/netsock.c | 2 | ||||
-rw-r--r-- | main/cdr.c | 36 |
4 files changed, 28 insertions, 15 deletions
diff --git a/bridges/bridge_native_rtp.c b/bridges/bridge_native_rtp.c index edbfe5858..e07f7facc 100644 --- a/bridges/bridge_native_rtp.c +++ b/bridges/bridge_native_rtp.c @@ -753,7 +753,7 @@ static int native_rtp_bridge_compatible(struct ast_bridge *bridge) static int native_rtp_bridge_framehook_attach(struct ast_bridge_channel *bridge_channel) { struct native_rtp_bridge_channel_data *data = bridge_channel->tech_pvt; - static struct ast_framehook_interface hook = { + struct ast_framehook_interface hook = { .version = AST_FRAMEHOOK_INTERFACE_VERSION, .event_cb = native_rtp_framehook, .destroy_cb = __ao2_cleanup, @@ -771,9 +771,10 @@ static int native_rtp_bridge_framehook_attach(struct ast_bridge_channel *bridge_ ast_debug(2, "Bridge '%s'. Attaching hook data %p to '%s'\n", bridge_channel->bridge->uniqueid, data, ast_channel_name(bridge_channel->chan)); - ast_channel_lock(bridge_channel->chan); /* We're giving 1 ref to the framehook and keeping the one from the alloc for ourselves */ hook.data = ao2_bump(data->hook_data); + + ast_channel_lock(bridge_channel->chan); data->hook_data->id = ast_framehook_attach(bridge_channel->chan, &hook); ast_channel_unlock(bridge_channel->chan); if (data->hook_data->id < 0) { diff --git a/include/asterisk/astobj.h b/channels/iax2/include/astobj.h index e9f00713c..e9f00713c 100644 --- a/include/asterisk/astobj.h +++ b/channels/iax2/include/astobj.h diff --git a/channels/iax2/netsock.c b/channels/iax2/netsock.c index 8e2bd0e12..17cc62039 100644 --- a/channels/iax2/netsock.c +++ b/channels/iax2/netsock.c @@ -46,7 +46,7 @@ #include "include/netsock.h" #include "asterisk/netsock2.h" #include "asterisk/utils.h" -#include "asterisk/astobj.h" +#include "include/astobj.h" struct ast_netsock { ASTOBJ_COMPONENTS(struct ast_netsock); diff --git a/main/cdr.c b/main/cdr.c index 0f6a66517..0ec6ada51 100644 --- a/main/cdr.c +++ b/main/cdr.c @@ -2097,7 +2097,12 @@ static void handle_dial_message(void *data, struct stasis_subscription *sub, str if (!peer && !caller) { return; } - if (filter_channel_snapshot(peer) || (caller && filter_channel_snapshot(caller))) { + + if (peer && filter_channel_snapshot(peer)) { + return; + } + + if (caller && filter_channel_snapshot(caller)) { return; } @@ -2871,32 +2876,39 @@ int ast_cdr_backend_unsuspend(const char *name) static int cdr_generic_register(struct be_list *generic_list, const char *name, const char *desc, ast_cdrbe be) { - struct cdr_beitem *i = NULL; + struct cdr_beitem *i; + struct cdr_beitem *cur; - if (!name) + if (!name) { return -1; + } if (!be) { ast_log(LOG_WARNING, "CDR engine '%s' lacks backend\n", name); + + return -1; + } + + i = ast_calloc(1, sizeof(*i)); + if (!i) { return -1; } + i->be = be; + ast_copy_string(i->name, name, sizeof(i->name)); + ast_copy_string(i->desc, desc, sizeof(i->desc)); + AST_RWLIST_WRLOCK(generic_list); - AST_RWLIST_TRAVERSE(generic_list, i, list) { - if (!strcasecmp(name, i->name)) { + AST_RWLIST_TRAVERSE(generic_list, cur, list) { + if (!strcasecmp(name, cur->name)) { ast_log(LOG_WARNING, "Already have a CDR backend called '%s'\n", name); AST_RWLIST_UNLOCK(generic_list); + ast_free(i); + return -1; } } - if (!(i = ast_calloc(1, sizeof(*i)))) - return -1; - - i->be = be; - ast_copy_string(i->name, name, sizeof(i->name)); - ast_copy_string(i->desc, desc, sizeof(i->desc)); - AST_RWLIST_INSERT_HEAD(generic_list, i, list); AST_RWLIST_UNLOCK(generic_list); |