summaryrefslogtreecommitdiff
path: root/res/stasis/control.c
diff options
context:
space:
mode:
Diffstat (limited to 'res/stasis/control.c')
-rw-r--r--res/stasis/control.c58
1 files changed, 38 insertions, 20 deletions
diff --git a/res/stasis/control.c b/res/stasis/control.c
index 7e8ea91ef..df97931a7 100644
--- a/res/stasis/control.c
+++ b/res/stasis/control.c
@@ -137,8 +137,9 @@ static void app_control_register_rule(
const struct stasis_app_control *control,
struct app_control_rules *list, struct stasis_app_control_rule *obj)
{
- SCOPED_AO2LOCK(lock, control->command_queue);
+ ao2_lock(control->command_queue);
AST_LIST_INSERT_TAIL(list, obj, next);
+ ao2_unlock(control->command_queue);
}
static void app_control_unregister_rule(
@@ -146,7 +147,8 @@ static void app_control_unregister_rule(
struct app_control_rules *list, struct stasis_app_control_rule *obj)
{
struct stasis_app_control_rule *rule;
- SCOPED_AO2LOCK(lock, control->command_queue);
+
+ ao2_lock(control->command_queue);
AST_RWLIST_TRAVERSE_SAFE_BEGIN(list, rule, next) {
if (rule == obj) {
AST_RWLIST_REMOVE_CURRENT(next);
@@ -154,6 +156,7 @@ static void app_control_unregister_rule(
}
}
AST_RWLIST_TRAVERSE_SAFE_END;
+ ao2_unlock(control->command_queue);
}
/*!
@@ -580,9 +583,10 @@ static int app_control_mute(struct stasis_app_control *control,
struct ast_channel *chan, void *data)
{
struct stasis_app_control_mute_data *mute_data = data;
- SCOPED_CHANNELLOCK(lockvar, chan);
+ ast_channel_lock(chan);
ast_channel_suppress(control->channel, mute_data->direction, mute_data->frametype);
+ ast_channel_unlock(chan);
return 0;
}
@@ -607,9 +611,10 @@ static int app_control_unmute(struct stasis_app_control *control,
struct ast_channel *chan, void *data)
{
struct stasis_app_control_mute_data *mute_data = data;
- SCOPED_CHANNELLOCK(lockvar, chan);
+ ast_channel_lock(chan);
ast_channel_unsuppress(control->channel, mute_data->direction, mute_data->frametype);
+ ast_channel_unlock(chan);
return 0;
}
@@ -818,7 +823,7 @@ void stasis_app_control_silence_stop(struct stasis_app_control *control)
struct ast_channel_snapshot *stasis_app_control_get_snapshot(
const struct stasis_app_control *control)
{
- RAII_VAR(struct stasis_message *, msg, NULL, ao2_cleanup);
+ struct stasis_message *msg;
struct ast_channel_snapshot *snapshot;
msg = stasis_cache_get(ast_channel_cache(), ast_channel_snapshot_type(),
@@ -831,6 +836,8 @@ struct ast_channel_snapshot *stasis_app_control_get_snapshot(
ast_assert(snapshot != NULL);
ao2_ref(snapshot, +1);
+ ao2_ref(msg, -1);
+
return snapshot;
}
@@ -839,7 +846,8 @@ static int app_send_command_on_condition(struct stasis_app_control *control,
command_data_destructor_fn data_destructor,
app_command_can_exec_cb can_exec_fn)
{
- RAII_VAR(struct stasis_app_command *, command, NULL, ao2_cleanup);
+ int ret;
+ struct stasis_app_command *command;
if (control == NULL || control->is_done) {
/* If exec_command_on_condition fails, it calls the data_destructor.
@@ -859,7 +867,10 @@ static int app_send_command_on_condition(struct stasis_app_control *control,
return -1;
}
- return command_join(command);
+ ret = command_join(command);
+ ao2_ref(command, -1);
+
+ return ret;
}
int stasis_app_send_command(struct stasis_app_control *control,
@@ -872,7 +883,7 @@ int stasis_app_send_command_async(struct stasis_app_control *control,
stasis_app_command_cb command_fn, void *data,
command_data_destructor_fn data_destructor)
{
- RAII_VAR(struct stasis_app_command *, command, NULL, ao2_cleanup);
+ struct stasis_app_command *command;
if (control == NULL || control->is_done) {
/* If exec_command fails, it calls the data_destructor. In order to
@@ -890,33 +901,39 @@ int stasis_app_send_command_async(struct stasis_app_control *control,
if (!command) {
return -1;
}
+ ao2_ref(command, -1);
return 0;
}
struct ast_bridge *stasis_app_get_bridge(struct stasis_app_control *control)
{
+ struct ast_bridge *ret;
+
if (!control) {
return NULL;
- } else {
- SCOPED_AO2LOCK(lock, control);
- return control->bridge;
}
+
+ ao2_lock(control);
+ ret = control->bridge;
+ ao2_unlock(control);
+
+ return ret;
}
static int bridge_channel_depart(struct stasis_app_control *control,
struct ast_channel *chan, void *data)
{
- struct ast_bridge_channel *bridge_channel = data;
+ struct ast_bridge_channel *bridge_channel;
- {
- SCOPED_CHANNELLOCK(lock, chan);
+ ast_channel_lock(chan);
+ bridge_channel = ast_channel_internal_bridge_channel(chan);
+ ast_channel_unlock(chan);
- if (bridge_channel != ast_channel_internal_bridge_channel(chan)) {
- ast_debug(3, "%s: Channel is no longer in departable state\n",
- ast_channel_uniqueid(chan));
- return -1;
- }
+ if (bridge_channel != data) {
+ ast_debug(3, "%s: Channel is no longer in departable state\n",
+ ast_channel_uniqueid(chan));
+ return -1;
}
ast_debug(3, "%s: Channel departing bridge\n",
@@ -931,9 +948,9 @@ static void internal_bridge_after_cb(struct ast_channel *chan, void *data,
enum ast_bridge_after_cb_reason reason)
{
struct stasis_app_control *control = data;
- SCOPED_AO2LOCK(lock, control);
struct ast_bridge_channel *bridge_channel;
+ ao2_lock(control);
ast_debug(3, "%s, %s: %s\n",
ast_channel_uniqueid(chan), control->bridge ? control->bridge->uniqueid : "unknown",
ast_bridge_after_cb_reason_string(reason));
@@ -979,6 +996,7 @@ static void internal_bridge_after_cb(struct ast_channel *chan, void *data,
ast_softhangup_nolock(chan, hangup_flag);
ast_channel_unlock(chan);
}
+ ao2_unlock(control);
}
static void bridge_after_cb(struct ast_channel *chan, void *data)