summaryrefslogtreecommitdiff
path: root/bridges
diff options
context:
space:
mode:
authorRichard Mudgett <rmudgett@digium.com>2013-07-26 21:34:23 +0000
committerRichard Mudgett <rmudgett@digium.com>2013-07-26 21:34:23 +0000
commitc017d5e6a34fa7e8dc7ba089b5db2338f117c81b (patch)
treed111b5985f3985ab02a462d4b48467b537163b70 /bridges
parent50aba6be3654e348960a3bda2312f7a913f5c160 (diff)
Remove the unsafe bridge parameter from ast_bridge_hook_callback's.
Most hook callbacks did not need the bridge parameter. The pointer value could become invalid if the channel is moved to another bridge while it is executing. * Fixed some issues in feature_attended_transfer() as a result. * Reduce the bridge inhibit count in attended_transfer_properties_shutdown() after it has restored the bridge channel hooks. * Removed basic bridge requirement on feature_blind_transfer(). It does not require the basic bridge like feature_attended_transfer(). git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@395574 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'bridges')
-rw-r--r--bridges/bridge_builtin_features.c14
-rw-r--r--bridges/bridge_builtin_interval_features.c6
2 files changed, 12 insertions, 8 deletions
diff --git a/bridges/bridge_builtin_features.c b/bridges/bridge_builtin_features.c
index 324969f33..c22b83548 100644
--- a/bridges/bridge_builtin_features.c
+++ b/bridges/bridge_builtin_features.c
@@ -214,7 +214,7 @@ static void start_automonitor(struct ast_bridge_channel *bridge_channel, struct
pbx_builtin_setvar_helper(peer_chan, "TOUCH_MONITOR_OUTPUT", touch_filename);
}
-static int feature_automonitor(struct ast_bridge *bridge, struct ast_bridge_channel *bridge_channel, void *hook_pvt)
+static int feature_automonitor(struct ast_bridge_channel *bridge_channel, void *hook_pvt)
{
const char *start_message;
const char *stop_message;
@@ -226,7 +226,9 @@ static int feature_automonitor(struct ast_bridge *bridge, struct ast_bridge_chan
RAII_VAR(struct ast_features_general_config *, features_cfg, NULL, ao2_cleanup);
features_cfg = ast_get_chan_features_general_config(bridge_channel->chan);
- peer_chan = ast_bridge_peer(bridge, bridge_channel->chan);
+ ast_bridge_channel_lock_bridge(bridge_channel);
+ peer_chan = ast_bridge_peer_nolock(bridge_channel->bridge, bridge_channel->chan);
+ ast_bridge_unlock(bridge_channel->bridge);
if (!peer_chan) {
ast_verb(3, "Cannot start AutoMonitor for %s - can not determine peer in bridge.\n",
@@ -397,7 +399,7 @@ static void start_automixmonitor(struct ast_bridge_channel *bridge_channel, stru
pbx_builtin_setvar_helper(peer_chan, "TOUCH_MIXMONITOR_OUTPUT", touch_filename);
}
-static int feature_automixmonitor(struct ast_bridge *bridge, struct ast_bridge_channel *bridge_channel, void *hook_pvt)
+static int feature_automixmonitor(struct ast_bridge_channel *bridge_channel, void *hook_pvt)
{
static const char *mixmonitor_spy_type = "MixMonitor";
const char *stop_message;
@@ -410,7 +412,9 @@ static int feature_automixmonitor(struct ast_bridge *bridge, struct ast_bridge_c
RAII_VAR(struct ast_features_general_config *, features_cfg, NULL, ao2_cleanup);
features_cfg = ast_get_chan_features_general_config(bridge_channel->chan);
- peer_chan = ast_bridge_peer(bridge, bridge_channel->chan);
+ ast_bridge_channel_lock_bridge(bridge_channel);
+ peer_chan = ast_bridge_peer_nolock(bridge_channel->bridge, bridge_channel->chan);
+ ast_bridge_unlock(bridge_channel->bridge);
if (!peer_chan) {
ast_verb(3, "Cannot do AutoMixMonitor for %s - cannot determine peer in bridge.\n",
@@ -476,7 +480,7 @@ static int feature_automixmonitor(struct ast_bridge *bridge, struct ast_bridge_c
}
/*! \brief Internal built in feature for hangup */
-static int feature_hangup(struct ast_bridge *bridge, struct ast_bridge_channel *bridge_channel, void *hook_pvt)
+static int feature_hangup(struct ast_bridge_channel *bridge_channel, void *hook_pvt)
{
/*
* This is very simple, we simply change the state on the
diff --git a/bridges/bridge_builtin_interval_features.c b/bridges/bridge_builtin_interval_features.c
index 4a091126b..6b8e91b1e 100644
--- a/bridges/bridge_builtin_interval_features.c
+++ b/bridges/bridge_builtin_interval_features.c
@@ -50,7 +50,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/stringfields.h"
#include "asterisk/musiconhold.h"
-static int bridge_features_duration_callback(struct ast_bridge *bridge, struct ast_bridge_channel *bridge_channel, void *hook_pvt)
+static int bridge_features_duration_callback(struct ast_bridge_channel *bridge_channel, void *hook_pvt)
{
struct ast_bridge_features_limits *limits = hook_pvt;
@@ -110,7 +110,7 @@ static void limits_interval_playback(struct ast_bridge_channel *bridge_channel,
}
}
-static int bridge_features_connect_callback(struct ast_bridge *bridge, struct ast_bridge_channel *bridge_channel, void *hook_pvt)
+static int bridge_features_connect_callback(struct ast_bridge_channel *bridge_channel, void *hook_pvt)
{
struct ast_bridge_features_limits *limits = hook_pvt;
@@ -118,7 +118,7 @@ static int bridge_features_connect_callback(struct ast_bridge *bridge, struct as
return -1;
}
-static int bridge_features_warning_callback(struct ast_bridge *bridge, struct ast_bridge_channel *bridge_channel, void *hook_pvt)
+static int bridge_features_warning_callback(struct ast_bridge_channel *bridge_channel, void *hook_pvt)
{
struct ast_bridge_features_limits *limits = hook_pvt;