summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bridges/bridge_native_rtp.c5
-rw-r--r--channels/iax2/include/astobj.h (renamed from include/asterisk/astobj.h)0
-rw-r--r--channels/iax2/netsock.c2
-rw-r--r--main/cdr.c36
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);